繁体   English   中英

如何从过滤器读取JSF会话bean?

[英]How could I read a JSF session bean from a filter?

我正在搜索,但找不到答案,我需要基于权限的安全资源,我无法使用过滤器,因为FacesContext之前未初始化,因此我需要在会话bean中加载权限。 一些避免使用过滤器的解决方案? PhaseListener,ViewHandler和ResourceHandler无法捕获URL资源请求,例如,我需要拒绝此直接访问: http://127.0.0.1:8080/test/resources/images/image.jpg : http://127.0.0.1:8080/test/resources/images/image.jpg : http://127.0.0.1:8080/test/resources/images/image.jpg test/resources/images/ http://127.0.0.1:8080/test/resources/images/image.jpg

提前谢谢...

JSF将会话范围内的受管bean作为HttpSession的属性存储,而HttpServletRequest#getSession()可以在Filter使用该属性。

HttpSession session = ((HttpServletRequest) request).getSession();
SessionBean sessionBean = session.getAttribute("sessionBean");
// ...

更新 :根据您似乎实际上在使用CDI的注释:

我的过滤器比JSF之前触发,当我使用getAttribute时总是得到一个空值。 我在Bean上使用带有“命名”和“ SessionScoped”注释的CDI,因为我需要使用拦截器来实现安全性

我知道您使用的是JSF自己的@ManagedBean ,最初的答案仅适用@ManagedBean 如果您的bean已经由CDI的@Named管理,那么只需在Filter以通常的方式使用CDI自己的@Inject

@Inject
private SessionBean sessionBean;

如果是JSF @ManagedBean ,则应仅添加if (sessionBean != null)检查。 是否在JSF servlet之前调用过滤器是无关紧要的。 JSF创建了会话bean之后,它在过滤器中就不会为null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM