Mil*_*aid 3 jsf authorization jsf-2 servlet-filters phaselistener
我目前正在使用PhaseListener如下方法来执行用户授权.
private PhaseId phaseId = PhaseId.RESTORE_VIEW;
@Override
public void afterPhase(PhaseEvent event) {
FacesContext fc = event.getFacesContext();
boolean isOnAllowedPage = false;
String[] allowedPages = choseRightPages(); // chose pages for role
for (String s : allowedPages) {
if (fc.getViewRoot().getViewId().lastIndexOf(s) > -1) {
isOnAllowedPage = true;
break;
}
}
if (!isOnAllowedPage) {
NavigationHandler nh = fc.getApplication().getNavigationHandler();
nh.handleNavigation(fc, null, "prohibited");
}
}
Run Code Online (Sandbox Code Playgroud)
它做我想要的,但我没有看到它列在如何处理数据库中的用户的身份验证/授权?而这个名为"使用phaselistener问题的授权"的Coderanch主题也提到了以下内容:
您不应该将与JSF紧密相关的授权结合在一起.更好地利用容器管理的身份验证和/或作用于覆盖受保护页面的url模式的简单过滤器.
我并不完全理解在执行用户授权时使用a PhaseListener而不是a 的限制Filter.有人可以向我解释一下吗?
A PhaseListener仅在JSF请求(即调用它的HTTP请求FacesServlet)上触发.执行非JSF请求时不会触发它,从而暴露非JSF请求的潜在安全漏洞.一个servlet Filter可以在每个单独的HTTP请求被触发,而不考虑目标的servlet.
换句话说:HTTP请求授权不应该与FacesContext可用资源相关联,而应该与ServletRequest可用资源相关联.始终尽量授权为"低级别".
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |