Я перевожу приложение JAVA EE из WebLogic в JBoss EAP 7.1, и у меня возникают проблемы при добавлении HttpServletRequest в мой класс с состоянием.Для Weblogic это работает нормально.В Jboss я всегда получаю null в:
@ Context private HttpServletRequest servletRequest;
Этот метод getSession () я использую в моем перехватчике.Для WebLogic я использую jersey 2, для JBoss я использую модуль resteasy 3.Я пытался следовать этой статье, но это не помогло мне, потому что InvocationContext не видит параметр HttpServletRequest. Служба REST JEE6 @AroundInvoke Interceptor вводит нулевой объект HttpServletRequest
В простых 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>