我有一个新项目,我想实现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?
答案 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中的信息(例如所需的角色)