2013-06-19 22 views
5

私はグーグルグーグルで何時間も何度も成功していませんでした。 解決策を見つけるのを手伝ってください。スプリングセキュリティ3.1。 URLパラメータを使用したカスタム認証失敗URL

春バージョン:春3.1

ログインページがあります。ログインページには、URLパラメータに依存します:

/login?code=client1 

または

/login?code=client2 

だから、CLIENT1とCLIENT2別のログインページがあります。

のsecurity.xml:ユーザーが間違った認証を行う場合

<sec:form-login login-page="/login" default-target-url="/start" authentication-failure-url="/login"/> 

は、だから私は彼を表示/ログインページ... しかし、ポイントは、私が対応するコードパラメータでログインページを表示する必要があります。

どうすればよいですか?あなたの事例はどうですか?

ありがとうございます。

UPDATE#1:

私はFailureHandlerクラスを作成しました:

public class GRSAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler implements AuthenticationFailureHandler { 

@Override 
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) { 

} 

} 

は私が必要なURLへのリダイレクトを取得するために内部に何を書くべきですか? 詳細を教えてください。

ありがとうございます!

答えて

6

SimpleUrlAuthenticationFailureHandlerを使用して、別のRedirectStrategyを実装して、構成済みのURLにリダイレクトし、元のクエリ文字列をリダイレクト先のURLに追加することができます。

public class QueryStringPropagateRedirectStrategy extends DefaultRedirectStrategy { 

    public void sendRedirect(HttpServletRequest request, 
      HttpServletResponse response, String url) throws IOException { 
     String urlWithOriginalQueryString = url + "?" + request.getQueryString(); 
     super.sendRedirect(request, response, urlWithOriginalQueryString); 
    } 

} 


認証失敗時のハンドラの構成

<bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> 
    <property name="redirectStrategy" ref="queryStringPropagateRedirectStrategy" /> 
    <property name="defaultFailureUrl" value="/login" /> 
</bean> 

<bean id="queryStringPropagateRedirectStrategy" class="...QueryStringPropagateRedirectStrategy" /> 
+0

を参照してください、ありがとう。と最後のばかげた質問:どのように私のハンドラに戦略をリンクする必要がありますか? – mad

+0

auth例外を取得する簡単な方法はありますか?私は異なる例外と異なる対応する情報をユーザに示す。ハンドラを作成してsaveException()メソッドをオーバーライドする必要がありますか?再度、感謝します。 – mad

+0

はspring-security 4.0.3で動作しません。request.getQueryString()は常にnullです。 –

関連する問題