【问题标题】:Access session scoped JSF managed bean in web filter在 Web 过滤器中访问会话范围的 JSF 托管 bean
【发布时间】:2013-01-05 21:15:52
【问题描述】:

我有一个名为 userSession 的 SessionScoped bean 来跟踪用户(用户名、ifLogged 等)。我想过滤一些页面,因此我需要从我创建的 webFilter 访问 bean。我怎么做?我看起来甚至不可能将 bean 导入潜在地可见。

【问题讨论】:

标签: jsf servlet-filters managed-bean session-scope


【解决方案1】:

在幕后,JSF 将会话范围的托管 bean 存储为 HttpSession 的属性,托管 bean 名称作为键。

所以,只要你有一个 @ManagedBean @SessionScoped public class User {},就应该在 doFilter() 方法中这样做:

HttpSession session = ((HttpServletRequest) request).getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;

if (user != null && user.isLoggedIn()) {
    // Logged in.
}

或者,如果您实际上是使用 CDI 而不是 JSF 来管理 bean,那么只需在过滤器中直接使用 @Inject

另见:

【讨论】:

  • 我能告诉你什么@BalusC 你应该被授予 JSF 硕士。
  • @BalusC:如果不调用该 bean 上的方法,我如何检查 CDI 注入(会话)bean 是否已被实例化(如果它不存在,它将创建 bean) ? session.getAttribute(<userBean>) 不适用于 CDI。谢谢。
【解决方案2】:

作为替代方案,您可以使用 CDI-bean 并正常注入 sessionbean。

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2013-12-13
    • 2014-06-30
    • 2011-06-08
    • 1970-01-01
    相关资源
    最近更新 更多