2011-12-22 146 views
0

我使用Spring Security 3.0.7Spring Security認證

我在配置文件中的網絡安全規則,允許只是爲了驗證的用戶訪問某些網頁:

<intercept-url pattern="/faces/paginas/secured/**" access="isAuthenticated()"/> 

當匿名用戶試圖訪問任何這些頁面,呈現登錄表單,以便輸入用戶名和密碼。

這是默認行爲。

但有沒有什麼辦法來呈現自定義頁面而不是登錄表單? (例如,一個頁面只顯示類似「拒絕訪問」的消息)

回答

0

因爲它是寫在春季安全文檔(第9.2節),你可以指定accessDeniedHandler它可以處理403錯誤(禁止):

<bean id="accessDeniedHandler" 
    class="org.springframework.security.web.access.AccessDeniedHandlerImpl"> 
    <property name="errorPage" value="/accessDenied.htm"/> 
</bean> 

此外,在點9.2.2可以讀:

缺省情況下,AccessDeniedHandlerImpl被使用,其只是發送一個403(禁止)響應於客戶端。或者,您可以顯式配置一個實例(如上例所示),並設置一個錯誤頁面URL,它將把請求轉發給它。這可以是一個簡單的「拒絕訪問」頁面,如JSP,也可以是一個更復雜的處理程序,如MVC控制器。當然,你可以自己實現接口並使用你自己的實現。

+0

但我認爲AccessDeniedHandler,你在它制定的錯誤頁面,是要求未authorizated(即,進行身份驗證,但不具有訪問資源所需的角色的用戶),ISN」它呢?但是我的情況是不同的(沒有通過身份驗證的用戶並嘗試訪問僅限經過身份驗證的用戶訪問的資源)。我認爲在我的情況下不會重定向到您所說的頁面。 – choquero70 2011-12-23 08:58:14

+0

確實,你是對的。在這種情況下,我有一個想法,認證用戶可以獲得某種角色,即ROLE_GUEST,但據我所知,Spring Security不提供這種解決方案,所以必須通過實現自己的類來擴展安全系統。 – 2011-12-23 12:05:03

+0

對於未經過身份驗證的用戶,Spring Security具有默認角色。這是IS_AUTHENTICATED_ANONYMOUSLY角色,但對我的目的沒有用處。然而,我在考慮如果我改變web安全規則,使用所有經過身份驗證的用戶擁有的角色(例如ROLE_USER),而不是使用「isAuthenticated()」,那麼如果未經過身份驗證的用戶試圖訪問它,他/她應該被重定向到自定義的accessDenied頁面,而不是登錄頁面。那將是我想要的。我必須嘗試一下。 – choquero70 2011-12-24 01:41:43

0

你必須通過

<form-login login-page="/accessDenied.htm" /> 

要啓用「正常登錄」來選擇拒絕訪問頁面,你必須要連接另一個網頁,其中提交其登錄表單/ j_spring_security_check(如果你不這樣做更改默認值)。

0

爲什麼不添加authentication-failure-url屬性到form-login標記?

<form-login login-page="/login.htm" 
         default-target-url="/successview.htm" 
         always-use-default-target="true" 
         authentication-failure-url = "/accessdenied.htm?login_error=1" />