2011-09-27 94 views
0

我在我的应用程序中使用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(如/导航)请求该文件。将有一个控制器来处理它,因此将返回任何导航文件。

该设计是否正确?如果是这样,我该如何执行?欢迎任何其他简单的解决方案我是Spring和Spring Security的新手。

回答

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> 
+0

感谢您的回答并投票。其实我的问题出现在我使用静态HTML文件。我需要在我的HTML文件中实现'authz'标签,可能使用JavaScript或在服务器端。你有什么建议吗? – kamaci

0

根据您的使用静态的HTML,我倒觉得设计你指定将是合理的。

有一个映射到navigation.html的控制器,它只会查看当前用户的授予权限,并返回具有所有(且仅)适当控件的html文件的正确静态html视图名称。