2014-10-27 45 views
2

我有一个新项目,我想实施spring-security以及spring framekwork的其他组件。如何为链接实现基于视图的弹簧安全性?

我计划实施春季安全到2级,请求URL级别视图级

  • 对于请求URL级别,我会用<intercept-url>标签限制只有授权用户才能访问URL。

  • 对于视图级别安全性,我将它用于应用程序的两个部分;

    • 对于网络应用程序菜单限制授权用户的菜单。
    • 页面内部限制授权用户的页面的某些部分。

我有是关于实施春季安全菜单环节的混乱。
因此,我需要使用弹簧taglibs<authorize>标签的url属性(重用<intercept-url>模式/接入组合),那么我就需要手工编写菜单链接是这样的:

<security:authorize url="/admin/superadmin/**" > 
     <a href="superadmin/index.jsp">Super admin page</a> 
</security:authorize> 

如果我下面拦截的URL规则:

<intercept-url pattern="/admin/superadmin/**" access="hasRole('ROLE_SUPER_ADMIN')" /> 

的一点是,我在数据库表中的所有规则,我想提请动态基于保存在表中的角色/链接的链接。

所以,问题是如何绘制菜单链接动态,并在同一时间仍然使用<authorize>标签库?

+0

如果您动态地绘制菜单,它会是一个选择只绘制可访问的项目?换句话说,当你绘制菜单时,你有权访问当前登录的用户吗? – 2014-10-27 09:09:07

+0

是的,当然我可以访问用户和他的权限(角色),但这种情况下,我将生成授权标记的代码..或者我根本不会使用它。正确? – 2014-10-27 09:24:02

+0

您能否提供更多说明? – 2014-10-27 09:44:01

回答

2

<authorize>标签可以自动执行您所需的操作。我想你的菜单JSP看起来像(无安全部分):

<c:foreach items="${menus}" var="menu"> 
    <a href=${menu.url}>${menu.label}</a> 
</c:foreach> 

您可以简单地添加安全性的方法:

<c:foreach items="${menus}" var="menu"> 
    <security:authorize url=${menu.url}> 
     <a href=${menu.url}>${menu.label}</a> 
    </security:authorize> 
</c:foreach> 

Spring Security的参考手册说,当你使用的命名空间的authorize标签为提供的URL创建一个虚拟web请求,并调用安全拦截器以查看请求是成功还是失败。这允许您委派到您在命名空间配置中使用intercept-url声明定义的访问控制设置,并且不必在JSP中复制信息(例如所需的角色)