2012-03-12 41 views
11

我已經在我的應用程序中實現彈簧的安全,我的彈簧security.xml文件有以下形式登錄標記後默認目標網址。春季安全不打成功authtication

<form-login login-page="/login.htm" default-target-url="/dashboard.htm" 
      authentication-failure-url="/login.htm?error=true" 
      authentication-success-handler-ref="authenticationSuccessHandler" /> 

我想從/login.htm登錄,成功驗證後我希望用戶點擊dashboard.htm。 Everythig工作正常,除了成功的身份驗證後,它不會擊中/dashboard.htm,但命中上下文......但如果我手動在url中鍵入dashboard.htm然後一切工作正常...是的..我有執行authticationSuccessHandler。

+0

試圖激活調試LEVE春季安全,看看到底是怎麼回事之一。你在使用其他過濾器嗎?作爲urlrewrite? – jddsantaella 2012-03-12 22:35:21

+1

我不是Spring Security的專家,但爲什麼你同時擁有default-target-url和authentication-success-handler?你可以刪除默認目標網址,做在成功處理程序重定向 – Blitzkr1eg 2012-03-13 07:43:14

+3

Blitzkr1eg是正確的,你不應該有兩種認證成功處理程序-ref和缺省目標URL。從authentication-success-handler-ref描述:「應該用於處理成功的認證請求的AuthenticationSuccessHandler bean的引用。**不應該與default-target-url(或者always-use-default -target-URL)作爲 實施應始終與導航處理的後續目的地**」 – Dani 2012-03-13 15:05:47

回答

14

嘗試取出default-target-url屬性,並添加以下內容:

<b:bean id="authenticationSuccessHandler" class="com.example.CustomSimpleURLAuthenticationSuccessHandler"> 
    <b:property name="defaultTargetUrl" value="/dashboard.htm"/> 
</b:bean> 
+0

感謝瓦西雷斯......這個工作對我來說.. – Ashish 2012-03-15 10:19:04

+0

@vasilakis將始終重定向到目標URL是默認還是沒有? – 2012-10-06 16:08:53

8
<beans:bean id="loginSuccessHandler" class="com.example.LoginSuccessHandler"> 
    <beans:property name="defaultTargetUrl" value="/security/success"/> 
    <beans:property name="alwaysUseDefaultTargetUrl" value="true"/> 
</beans:bean> 

public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, 
            Authentication authentication) throws ServletException, IOException { 
     request.getSession().setMaxInactiveInterval(60 * 60); //one hour 
     System.out.println("Session set up for 60min"); 
     super.onAuthenticationSuccess(request, response, authentication); 
     } 
} 
+1

謝謝!這一個爲我工作:) – 2014-02-09 10:05:39

+0

一個很好的答案! – Omid 2017-01-02 22:28:52

+0

對於任何使用純Java配置的人,您可以在構造函數中設置公共屬性LoginSuccessHandler(){super(); setAlwaysUseDefaultTargetUrl(true); setDefaultTargetUrl(「/ security/success」); } – ryanp102694 2017-02-18 15:30:08

0

正如你可以在圖片中看到,有某種壞的設計(IMO它總是重定向到default-target-url)。 當你去到登錄表單,從被禁止的資源,將您重定向到URL並不會直通the default-target-url

http://i.stack.imgur.com/fj9ou.png