Java CDI RequestScope在请求中提供多个对象

Java CDI RequestScope在请求中提供多个对象,java,cdi,Java,Cdi,我有一个应用程序,其中有一个bean作为 @RequestScoped public class UserSession extends SessionMessage { } 然后我们有一个WebFilter,上面的bean被注入其中。过滤器填充此userSession对象上的所有属性 public class SessionFilter implements Filter { @Inject private UserSession userSession; ....

我有一个应用程序,其中有一个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时,我无法理解为什么不注入它。我遗漏了什么吗?

你对同一个物体是什么意思? 如果调用getter方法,那么过滤器中设置的内容是否仍在TokenService中

SessionFilter和TokenService中注入的bean是cdi代理对象,隐藏每个请求的实际实例。
有关更多详细信息,请参见

我遇到了完全相同的问题。我将JavaEE7与wildfly 8.1一起使用

我目前的解决方案是使用

HttpServletRequest context = (HttpServletRequest) PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
这可以在UserSession中使用,通过Http头填充会话

@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;
    }

}

在筛选器中设置的属性在TokenService中不可用。如果我将userSession对象记录在filter和token中,我会得到以下信息:2014年9月2日下午3:34:40 SessionFilter doFilter信息:userSession:UserSession@3fcfbc652014年9月2日下午3:34:40 TokenService createToken信息:用户会话:UserSession@5f59ab9d从这里,我意识到我得到了一个独立的物体,就像我说的:注入的bean是隐藏真实实例的代理(每个请求)。使用setter-and-getter方法访问属性,它应该按照预期工作。我知道这些是代理对象。我正在使用getter方法获取userSession的属性。但是,当我尝试在TokenService中访问它时,没有设置属性。我可以看到过滤器中设置的属性。你能说明你在使用什么实现吗?