2011-03-15 27 views
1

私はカスタムJetty UserRealm実装を持ち、基本認証(SSLあり)のために設定されていますが、3回目のログイン失敗後に特定のページに移動する方法はありますか?Jetty UserRealmが3回目のログインに失敗しました

本当に私は、3回の試行後にログインできない場合、連絡先情報をユーザーに表示したいだけです。

代わりに、それは私がその基本認証として設定

public Principal authenticate(final String username, final Object credentials, final Request request) 

メソッドからスロー例外を表示することが可能でしょうか?

おかげ ニール

答えて

1

BasicAuthenticatorがリクエストには有効な資格情報がありませんとき403応答を送信する責任があります。桟橋6のソースを見てみると

、あなたが最高だ賭けはBasicAuthenticatorはをサブクラス化し、オーバーライドすることはおそらくありpublic void sendChallenge(UserRealm realm,Response response)

public class MyAuthenticator extends BasicAuthenticator { 
    @Override 
    public void sendChallenge(UserRealm realm, Response response) { 
     int numberOfAttempts = getNumberOfAuthenticationAttempts(); 

     if (numberOfAttempts > 3) { 
      sendContactDetails(realm, response); 
     } 
     else 
      super.sendChallenge(realm, response); 
    } 

    protected int getNumberOfAuthenticationAttempts() { ... } 
    protected void sendContactDetails(Response response) { ... } 

}

明らかにこれをやって問題は、あなたがアクセス権を持っていないということですHttpServletRequestに移動すると、追跡要求の試行がより困難になる可能性があります。あなたはおそらくHttpConnection.getCurrentConnection()経由でこれにアクセスすることができます。そうでなければ、BasicAuthenticatorのコードは、コピー/ペーストの塊なしでは拡張子にはなりませんが、あなたのケースでは問題ありません。

同じ認証試行でリクエスト数がどのように追跡されたかという問題は無視しています。これはクライアントの接続状況に依存します。

また、コンテキストにErrorHandlerを設定することもできます。これは、HttpResponse.sendErrorが呼び出されたときに使用されます。これは、レルムで例外をスローする場合に発生します。

私はおそらくより明確に責任を分けるので、最初の方法を使用することを選択します。

+0

未確認の証明書についてJettyから500エラーが送信されました。https://bugs.eclipse.org/bugs/show_bug.cgi?id=486497 500エラーページではなくログインページに戻る方法を知っていますか?私は拡張されたErrorHandlerを持っています。私は現在、500のエラーを選び出し、httpヘッダーのBasic Authをクリアするためにユーザーをログアウトしようとしています:Authorization:Basic QTo = –

関連する問題