【问题标题】:Disabling edit functionality using Spring Security使用 Spring Security 禁用编辑功能
【发布时间】:2011-11-29 04:45:39
【问题描述】:

我在我的应用程序中集成了 Spring Security,并在我的 spring-security.xml 中定义了对页面的访问级别,格式如下

<intercept-url pattern="/login" access="permitAll" />
<intercept-url pattern="/index" access="Admin" />

现在,上面提到的模式限制了对某个页面的访问,但是是否可以通过允许所有用户查看页面来更精细地限制访问,但禁用页面上的编辑控件。

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    当然。如果您使用的是 JSP,则有内置的tag libraries

    <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
    
    <sec:authorize access="hasRole('supervisor')">
      <a href="edit">edit</a>
    </sec:authorize>
    

    edit 链接仅在用户具有supervisor 角色时才会出现。其他视图技术也有类似的解决方案。如果您在 Wicket 等组件框架中构建 UI,只需检查 Java 代码中的用户凭据并在其中隐藏某些控件。

    然而,这仅仅是个开始。您还应该通过限制 URL 或 Java 方法(@Secured 和朋友)来加强服务器端的安全性。

    否则链接将不可见,但恶意用户仍然可以发现隐藏的 URL 或使用外部工具执行 HTTP POST。

    【讨论】:

    • 应用.需要做哪些服务器端配置
    【解决方案2】:

    正如 Tomasz 所写,Spring Security 标签库是一个好的开始。但是,您很可能也希望保护控制器中的相应方法(如果某些未经授权的人找到 /edit url 并调用它)。这样做的方法是将 JSR-250 @RolesAllowed 或 Spring 的 @Secured 注释添加到您的控制器,例如

    public class SomePageController {
    
        @RolesAllowed("Admin")
        public void editSomething(Map<String, String> data) {
            // only Admins reach this part
        }
    }
    

    添加

    <global-method-security jsr250-annotations="enabled" />
    

    JSR-250 注释的 Spring 配置或

    <global-method-security secured-annotations="enabled" />
    

    用于 Spring 的 @Secured 注释。更多信息可以在reference docs找到。

    【讨论】:

    • 感谢 matsev 提供的信息,我一定会查找并将其添加到我的代码中。
    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2016-05-25
    • 2021-05-06
    • 2015-08-16
    相关资源
    最近更新 更多