2011-09-27 124 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視圖名稱。