Resteasy 3 @Context HttpServletRequest在有状态bean中返回null

时间:2019-02-01 15:51:07

标签: java java-ee jboss migration resteasy

我要将JAVA EE应用程序从WebLogic迁移到JBoss EAP 7.1,当在我的Stateful类中注入HttpServletRequest时出现问题。对于Weblogic,这很好。在Jboss中,我总是在以下位置检索null:

@上下文 私有HttpServletRequest servletRequest;

我在拦截器中使用的getSession()方法。 对于WebLogic,我使用jersey 2;对于JBoss,我使用resteasy 3模块。 我尝试阅读本文,但是由于InvocationContext看不到HttpServletRequest参数,所以它对我没有帮助。 JEE6 REST Service @AroundInvoke Interceptor is injecting a null HttpServletRequest object

在简单的ResourceControllers中(当我通过方法注入时),所有方法都可以正常工作,例如:

 public Response getSomething (@Context HttpServletRrequest servletRequest) { }

也许您有一些建议为什么我有这个问题以及如何解决它。

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;

@RequestScoped
@Stateful
public class AuthContext {
    private static final Logger LOGGER = Logger.getLogger(AuthContext.class);

    @EJB
    private AuthCache authCache;

    @Context
    private HttpServletRequest servletRequest;

    public void getSession() {
      servletRequest.getCookies();
    }
}

我的拦截器类:

@AuthSecured
@Interceptor
@Priority(Interceptor.Priority.APPLICATION)
public class AuthSecuredInterceptor {
    private static final Logger LOGGER = Logger.getLogger(AuthSecuredInterceptor.class);

    @EJB
    AuthContext authContext;

    @AroundInvoke
    public Object interceptor(final InvocationContext context) throws Exception {
        try {
          authContext.getSession()
        } catch (Exception e) {
            return ResourceUtil.getResponseAndLogException(LOGGER, e, e.getMessage());
        }
        return context.proceed();
    }
}

我的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <display-name>Patient service</display-name>
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

0 个答案:

没有答案
相关问题