我根据用户角色在我的 webapp 中隐藏了一些链接......现在,例如,我将链接 sample.jsp 隐藏在我的用户中,角色等于 1。当然这会隐藏,但如果这个用户知道链接,他最终可以去到那个链接...如何配置这个?
3 回答
当有人访问链接指向的 URL 时,检查他们是否已经过身份验证(如果没有,向他们显示登录页面)以及他们通过身份验证的用户是否有权访问该页面(如果没有,向他们显示一条错误消息,说明并给他们一个“以不同用户身份登录”表格)。
首先,选择一个吸引您的安全框架,如 Sudhakar 提出的 Apache Shiro 或 Spring Security。要了解不同的安全框架,您可能会喜欢 Matt Raible 在此处对 2011 年的概述:Spring Security和Apache Shiro等。
接下来,如果您选择安全框架,您应该能够非常简单地遵循 Quentin 的回答。
非常基本的方案是根据角色(您应该有一些)将页面划分为逻辑组:例如,具有路径/admin/users/edit
(and admin/...
) 的页面将针对具有管理员角色的人,/user/order/view
(and user/...
) 将对已注册的人可见如果您希望为特定用户角色呈现页面的某些部分,则需要更高级的设置,例如两个管理员都可以访问/user/edit
,但仅当当前用户的角色等于管理员时才会呈现按钮删除。为了更加保护应用程序,您选择的框架应该提供一种基于用户角色保护业务逻辑方法的方法。可能还有一些特殊的标签来简化视图的创建,比如<shiro:hasRole>
,如果你选择 Shiro。
但是您的情况的基本解决方案是<h:link rendered="#{currentUser.roleOne}"/>
使用 backing-bean method public boolean isRoleOne() { return role.equals("1"); }
。当然,它只会隐藏链接,但用户仍然可以通过其 url 访问该页面。因此,您最终将要么编写大量的过滤器样板代码,要么使用被广泛接受的安全框架提出的解决方案。