【问题标题】:CDI RequestScope giving multiple object on a requestCDI RequestScope 在请求中提供多个对象
【发布时间】:2014-09-03 15:04:49
【问题描述】:

我有一个应用程序,其中我们有一个 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 时,我无法弄清楚为什么没有注入相同的对象。有什么我遗漏的吗?

【问题讨论】:

  • 您能说明一下您使用的是什么实现吗?

标签: java cdi


【解决方案1】:

同一个对象是什么意思? 如果调用getter-methods,过滤器中设置的东西是否还在TokenService中?

在 SessionFilter 和 TokenService 中注入的 Bean 是 cdi-proxy-objects,隐藏每个请求的实际实例。 更多详情见this question

【讨论】:

  • filter中设置的属性在TokenService中不可用。如果我在过滤器和令牌中记录 userSession 对象,我会得到以下信息:2014 年 9 月 2 日下午 3:34:40 @ 5f59ab9d 由此,我意识到我得到了一个单独的对象,而不是在过滤器中注入的对象。
  • 就像我说的:注入的 bean 是隐藏真实实例的代理(每个请求)。使用 setter 和 getter 方法访问属性,它应该可以按预期工作。
  • 我知道这些是代理对象。我正在使用 getter 方法来获取 userSession 的属性。但是,当我尝试在 TokenService 中访问它时,没有设置属性。我可以看到Filter中设置的属性。
【解决方案2】:

我遇到了完全相同的问题。我正在将 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;
    }

}

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 2013-07-19
    • 2021-07-02
    • 2014-06-21
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多