我在我的webapp中隐藏了一些链接,具体取决于用户角色...现在我举例说明我在我的用户中隐藏了链接sample.jsp,其角色等于1.当然这会隐藏但如果这个用户知道链接他最终可以转到那个链接......如何配置?
答案 0 :(得分:2)
当有人访问该链接指向的URL时,请检查他们是否已经过身份验证(如果没有,请向他们显示登录页面)以及他们是否经过身份验证的用户是否有权访问该页面(如果没有,请向他们显示错误消息解释并给他们“以不同的用户身份登录”表格。)
答案 1 :(得分:1)
Quentin建议应该这样做,如果你正在开发一个演示应用程序,它可能就足够了,
但是如果您认真考虑实施强大的身份验证和授权,那么您应该认真考虑学习任何开源安全框架。
这可以避免许多麻烦,特别是如果您的自定义为您的应用构建安全性。
答案 2 :(得分:0)
首先,选择一个吸引你的安全框架,如Sudhakar提出的Apache Shiro或Spring Security。要了解不同的安全框架,您可以在此处阅读Matt Raible对2011年的概述:Spring Security和Apache Shiro等。
接下来,如果您选择安全框架,您应该可以非常简单地关注Quentin的答案。
非常基本的方案将页面划分为基于角色的逻辑组(您希望一些):例如,路径为{{1}的页面(和/admin/users/edit
)将针对具有管理员角色的人员admin/...
(和/user/order/view
)对注册用户等可见。如果需要更高级的设置您希望为特定用户角色呈现页面的部分,例如两个管理员都可以访问user/...
,但仅当当前用户的角色等于管理员时才会呈现按钮删除。为了更好地保护应用程序,您选择的框架应该提供一种基于用户角色保护业务逻辑方法的方法。如果您选择Shiro,可能还会有一些特殊标记来简化视图创建,例如/user/edit
。
但是你的情况的基本解决方案是<shiro:hasRole>
和支持bean方法<h:link rendered="#{currentUser.roleOne}"/>
。当然,它只会隐藏链接,但用户仍然可以通过其URL访问该页面。因此,您最终将编写大部分Filter的样板代码或使用由广泛接受的安全框架提出的解决方案。