我已在我的应用程序中集成了Spring Security,并以下列格式定义了spring-security.xml中页面的访问级别
<intercept-url pattern="/login" access="permitAll" />
<intercept-url pattern="/index" access="Admin" />
现在,上面提到的模式限制了对特定页面的访问,但是可以通过允许所有用户查看页面来限制访问,并禁用页面上的编辑控件。
答案 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。