我有一个应用程序,我们有一个bean作为
@RequestScoped
public class UserSession extends SessionMessage {
}
然后我们有一个WebFilter
,其中注入了上面的bean。过滤器填充此userSession
对象的所有属性。
public class SessionFilter implements Filter {
@Inject
private UserSession userSession;
.....
public void doFilter(....){
.....
someService.populateSession(userSession);
chain.doFilter(req, res)
}
}
然后在
@Path("/token")
public class TokenService {
@Inject
private UserSession userSession;
.....
}
我希望在SessionFilter
中注入TokenService
中注入的相同对象。但是,TokenService
中的对象与SessionFilter
中注入的对象不同。
当我将其定义为RequestScope时,我无法弄清楚为什么不注入相同的对象。有什么我想念的吗?
答案 0 :(得分:0)
同一个对象是什么意思? 如果您调用getter-methods,过滤器中设置的内容是否仍然存在于 TokenService 中?
在 SessionFilter 和 TokenService 中注入的Bean是隐藏每个请求的实际实例的cdi-proxy-objects。 有关详细信息,请参阅this question
答案 1 :(得分:0)
我有完全相同的问题。我正在使用Java EE 7和wildfly 8.1。
我目前的解决方案是使用
HttpServletRequest context = (HttpServletRequest) PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
这可以在 UserSession 中使用,通过Http-Header填充会话
@RequestScoped
public class UserSession extends SessionMessage {
public Session getSession() {
HttpServletRequest context = (HttpServletRequest) PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
Session session = someService.populateSession(context);
return session;
}
}