如何实现链接的基于视图的弹簧安全性?

时间:2014-10-27 08:08:24

标签: spring spring-security

我有一个新项目,我想实现spring-security以及spring framekwork的其他组件。

我计划将Spring安全性分为两个级别,请求网址级别查看级别

  • 对于请求网址级,我使用<intercept-url>标记仅限授权用户访问网址。

  • 对于 View-Level 安全性,我会将其用于应用程序的两个部分;

    • 对于网络应用菜单,限制授权用户的菜单。
    • 页面,以限制授权用户的页面部分内容。

我的困惑是关于菜单链接的工具弹簧安全性 因此,我需要使用spring taglibs <authorize>标记url属性(重用<intercept-url>模式/访问组合),然后我需要编写菜单链接像这样:

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

我在下面拦截网址规则:

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

关键是,我拥有Database表中的所有规则,并且我想根据表中保存的角色/链接动态绘制链接。

那么, 问题是 如何动态绘制菜单链接,同时仍然使用<authorize> taglib?

1 个答案:

答案 0 :(得分: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安全参考手册指出,当您使用命名空间时,authorize标记会为提供的URL创建虚拟Web请求,并调用安全拦截器以查看请求是成功还是失败。这允许您使用命名空间配置中的intercept-url声明委派您定义的访问控制设置,并节省必须复制JSP中的信息(例如所需的角色)