我在我的应用程序中使用Spring和Spring Security 3。我的所有客户端都是静态HTML文件。我有一个导航栏,其中包含以下按钮:
当用户点击其中任何一个时,另一个页面会在底部加载。用户在我的应用程序中有角色。有些用户没有编辑和删除授权,而其他用户则没有。具有授权的用户应该可以看到这些按钮。如果用户没有编辑正确的权限,他/她就不能看到编辑按钮。我在HTML文件中定义了按钮:navigation.html
。我想通了:会有很多navigation.html文件。其中一个包括所有按钮(对于管理员)其中一个只包括列表按钮。如果用户请求navigation.html我想发送正确的。所以我可以拥有这种能力:
<logout logout-url="/j_spring_security_logout" logout-success-url="/login.html"/>
类似于该用户将从URL请求该文件(如/ navigation)。将有一个控制器来处理它,因此将返回任何导航文件。
这个设计听起来不错吗?如果是这样,我该如何实现呢?欢迎任何其他简单的解决方案我是Spring和Spring Security的新手。
答案 0 :(得分:2)
对于一般的Spring Security使用,您无需编写自己的代码即可启用授权。我通常使用XML配置Spring Security来控制基于角色的各种资源的总体访问。然后,我注释控制器和/或处理程序方法以更精确地限制。
示例:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns:security="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<security:global-method-security secured-annotations="enabled">
</security:global-method-security>
<security:http auto-config="true" disable-url-rewriting="true">
<security:intercept-url pattern="/*.do" access="ROLE_USER" />
<security:intercept-url pattern="/index.jsp" access="ROLE_USER" />
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/login.jsp" filters="none" />
<security:form-login login-page="/login.jsp" />
<security:logout />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:password-encoder hash="md5" />
<security:jdbc-user-service data-source-ref="my-ds"/>
</security:authentication-provider>
</security:authentication-manager>
</beans:beans>
然后在控制器中:
@Secured({"ROLE_SPECIAL_USER"})
@RequestMapping("/somespecial.do")
在JSP中:
<%@ taglib prefix="authz" uri="http://www.springframework.org/security/tags" %>
<authz:authorize ifAnyGranted="ROLE_SPECIAL_USER">
...some special JSP code...
</authz:authorize>
答案 1 :(得分:0)
根据您使用的静态HTML,我认为您指定的设计是合理的。
让一个控制器映射到navigation.html,它只会查看当前用户的授权权限,并返回包含所有(并且只有)适当控件的html文件的正确静态html视图名称。 / p>