2013-02-10 62 views
0

我隐藏了一些链接在我的webapp取决于用户角色...现在,例如我隐藏链接sample.jsp在我的用户角色等于1. Ofcourse这将隐藏,但如果此用户知道他可以链接最终去那个链接...如何配置这个?如何在JSP Web应用程序中保护链接?

+0

使用java脚本或jquery – 2013-02-10 13:13:07

+4

@ShahidGhafoor - 你*不能*使用客户端代码来保护任何东西。客户端代码可以由访问者更改! – Quentin 2013-02-10 13:18:10

+0

@Quentin同意了!但达到一定程度。 – 2013-02-10 13:29:08

回答

2

当有人访问该链接指向的URL时,检查它们是否已通过身份验证(如果没有,则向他们显示登录页面),并且如果他们被授权访问该页面的用户被授权访问该页面(如果没有,则显示他们一个错误消息解释并给他们“以不同的用户登录”的形式)。

1

昆汀建议应该做的,它可能是不够的,如果你正在开发一个演示应用程序,

但如果你是认真的在实现一个强大的身份验证和授权,那么你应该认真地给一个念头在学习任何开源安全框架。

这可以节省很多头痛,特别是如果您的自定义为您的应用程序构建安全性。

0

首先,选择一个安全框架,吸引你,如Apache四郎或Spring Security的建议,由Sudhakar。要了解不同的安全框架,您可能会喜欢Matt Raible在2011年的概述:Spring SecurityApache Shiro等等。

接下来,如果您选择了安全框架,那么您应该可以非常简单地关注Quentin的答案。

非常基本方案将网页到基于角色的逻辑组(你shiuld有几个):例如,与路径/admin/users/edit(和admin/...)页面将着眼于人的作用管理员,/user/order/view(和user/...)对于注册用户等都是可见的。如果您想为特定用户角色提供页面部分,则需要更高级的设置,例如两个管理员都可以访问/user/edit,但只有当前用户的角色等于管理员时才会呈现按钮删除。为了更多地保护应用程序,您选择的框架应该提供一种基于用户角色来保护业务逻辑方法的方法。如果您选择Shiro,可能还会有一些特殊标签来简化视图创建,如<shiro:hasRole>

但是,您的情况的基本解决方案是<h:link rendered="#{currentUser.roleOne}"/>与后盾bean方法public boolean isRoleOne() { return role.equals("1"); }。当然,它只会隐藏链接,但用户仍然可以通过它的URL访问该页面。所以,最终你最终会写一个Filter的样板代码,或者使用一个公认的安全框架提出的解决方案。