2012-03-12 10 views
11

私のアプリケーションでspring-securityを実装しましたが、私のspring-security.xmlにはform-loginタグがあります。authticationの成功後、Springセキュリティがdefault-target-urlに当たらない

<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からログインしたいと成功authetication後、私は、ユーザーがdashboard.htmをヒットします。 Everythigはうまく動作しますが、成功した認証の後は/dashboard.htmをヒットしませんが、コンテキストに当てはまりますが、手動でdashboard.htmをURLに入力するとすべて正常に動作します...はい。 authticationSuccessHandlerの実装。

+0

スルーつもりはありません。他のフィルタを使用していますか? urlrewriteとして? – jddsantaella

+1

私はSpring Securityの専門家ではありませんが、なぜdefault-target-urlとauthentication-success-handlerの両方を持っていますか?あなたはdefault-target-urlを削除し、成功ハンドラのリダイレクトを行うことができます – Blitzkr1eg

+3

Blitzkr1egが正しいです、あなたはauthentication-success-handler-refとdefault-target-urlの両方を持つべきではありません。 authentication-success-handler-refの説明:「正常な認証要求を処理するために使用するAuthenticationSuccessHandler Beanへの参照」** default-target-url(またはalways-use-default)と組み合わせて使用​​しないでください" – Dani

答えて

14

default-target-url属性を削除してみて、次の行を追加します。

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

ありがとうVasileios ...これは私のために働いた.. – Ashish

+0

@ targetil URLは常にデフォルトURLにリダイレクトされますか? –

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

ありがとう!これは私のために働いた:) –

+0

素晴らしい答え! – Omid

+0

純粋にJavaの設定を使用している人は、コンストラクタでプロパティを設定できます。public LoginSuccessHandler(){super(); setAlwaysUseDefaultTargetUrl(true); setDefaultTargetUrl( "/ security/success"); } – ryanp102694

6

私は質問spring is not redirecting to default target url?からこの提案を使用しています。私はこれを試して、それは働いています。あなたが画像で見ることができるように

<form-login login-page="/login.htm" 
default-target-url="/dashboard.htm" 
always-use-default-target="true"/> 
0

は、(IMOそれは常にdefault-target-urlへのリダイレクト)悪いデザインのいくつかの種類があります。あなたは禁断のリソースからログインフォームに行くとき は、そのURLにリダイレクトし、春のセキュリティのデバッグleveのを有効にし、1を何が起こっているかを確認するためにしようとthe default-target-url

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

関連する問題