实现授权控制器

时间:2011-09-27 13:07:41

标签: java spring spring-security authorization

我在我的应用程序中使用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的新手。

2 个答案:

答案 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>

相关问题