我已经SessionScoped豆叫userSession来跟踪用户(用户名,ifLogged等)。 我想过滤一些网页,因此我需要从我创建web过滤器访问这个bean。 我怎么做? 我看起来像它甚至无法导入bean是potenitally可见。
Answer 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管理豆类,那么就使用@Inject
在过滤器中直接。
也可以看看:
- 获得JSF在任何Servlet类相关托管bean的名字
- 防止JSF2访问受限页面,而不登录
Answer 2:
作为替代,您可以使用CDI豆,通常注入你的SessionBean。
文章来源: Access session scoped JSF managed bean in web filter