ser*_*nni 4 jsf authorization hyperlink spring-security
使用JSF + Spring Security.
解决方案1 - 面向UI:
JSF如果经过身份验证的人员ROLE_ADMIN仅具有权限,则页面将显示面板.
<p:panel rendered="#{facesContext.externalContext.isUserInRole('ROLE_ADMIN')}">
...
Run Code Online (Sandbox Code Playgroud)
解决方案2 - 面向后端(注释适当的DAO方法):
@Transactional
@PreAuthorize("hasRole('ROLE_ADMIN')")
public List<User> getUsers() {
return sessionFactory.getCurrentSession().createCriteria(User.class)
.list();
}
Run Code Online (Sandbox Code Playgroud)
简历:
看起来JSF rendered属性不是灵活的解决方案,DAO注释方法不是用户友好的,因为重定向到403.
什么是优雅的解决方案,允许我不显示与特定权限不对应的面板或链接?
您不希望显示最终用户面板或最终用户不允许查看/使用的任何类型的功能.这只会导致一般的混乱和沮丧.因此,rendered属性中的角色检查是要走的路.
表达式只能以这种形式更简化:
<p:panel rendered="#{request.isUserInRole('ROLE_ADMIN')}">
Run Code Online (Sandbox Code Playgroud)
的ExternalContext#isUserInRole()代表到HttpServletRequest#isUserInRole(),但HttpServletRequest其本身也存在于EL范围为#{request}.
| 归档时间: |
|
| 查看次数: |
4218 次 |
| 最近记录: |