【问题标题】:How to implement view-based spring security for links?如何为链接实现基于视图的弹簧安全性?
【发布时间】:2014-12-22 09:05:41
【问题描述】:

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

我计划将 Spring Security 实现为 2 个级别,Request URL-level 和 view-level

  • 对于请求 URL 级别,我会使用 <intercept-url> 标记来限制仅授权用户访问 URL。

  • 为了 View-Level 安全性,我将在应用程序的两个部分中使用它;

    • 对于网络应用menu,为授权用户限制菜单。
    • 以及页面内以限制授权用户访问页面的某些部分。

我的困惑是关于为 菜单 链接实施 spring 安全性。
因此我需要使用 spring 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')" />

重点是,我在 Database 表中拥有所有规则,我想根据表中保存的角色/链接动态绘制链接。

那么,问题是如何动态绘制菜单链接,同时还要使用&lt;authorize&gt; taglib?

【问题讨论】:

  • 如果您动态绘制菜单,是否可以选择仅绘制可访问项目?换一种说法,当你绘制菜单时,你是否可以访问当前登录的用户?
  • 是的,我当然可以访问用户和他的权限(角色),但是这种情况下我会生成授权标签的代码..或者我根本不会使用它.对吗?
  • 你能再澄清一下吗?

标签: spring spring-security


【解决方案1】:

&lt;authorize&gt; 标签可以自动执行您需要的操作。我假设您的菜单 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 请求,并调用安全拦截器来查看请求是成功还是失败。这允许您委托您在命名空间配置中使用拦截 url 声明定义的访问控制设置,并且不必在您的 JSP 中复制信息(例如所需的角色)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2013-08-26
    • 2020-05-19
    • 2012-01-07
    • 2016-06-19
    • 2018-01-21
    • 2016-05-27
    相关资源
    最近更新 更多