使用Spring Security禁用编辑功能

时间:2011-11-28 20:07:50

标签: java spring spring-mvc spring-security

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

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

现在,上面提到的模式限制了对特定页面的访问,但是可以通过允许所有用户查看页面来限制访问,并禁用页面上的编辑控件。

2 个答案:

答案 0 :(得分:2)

当然。如果您使用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。

答案 1 :(得分:1)

正如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" />

for Spring的@Secured注释。更多信息可以在reference docs

中找到