2012-03-29 18 views
2

Java EEのフォームベース認証を使用してWebアプリケーションを保護すると、 loginおよびand error htmlページを指定できます。 http://docs.oracle.com/javaee/5/tutorial/doc/bncbe.htmljava ee http-basic認証エラーページ

例:HTTP基本認証を使用して

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>file</realm-name> 
    <form-login-config> 
     <form-login-page>/logon.jsp</form-login-page> 
     <form-error-page>/logonError.jsp</form-error-page> 
    </form-login-config> 
</login-config> 

ユーザのログイン/ PWDを取得するには、クライアントのWebブラウザのresponsabilityあるので、我々は一般的に使用する(ログインページ を指定することはできませんポップアップ)。

<login-config> 
    <auth-method>BASIC</auth-method> 
</login-config> 

ただし、エラーページを指定する必要があります。それは可能ですか?どうやって? HTTP/Basic認証(およびJava EE)を使用して、login/pwdが正しくない場合(フォームベースの認証の場合と同様に)、特定のエラーページを表示する必要があります。

答えて

4

いいえ、BASIC authenitcationでloginpage/errorpageを設定することはできません。これは、認証がどのように動作するか異なります。

FORMログイン:

  • クライアントがリクエスト保護されたページへ/application/securedpag
  • Serverは、ログイン-config設定で設定200 Status code along with login.jsp
  • クライアントがj_usernamej_passwordを埋め、提出を送信します〜j_security_checkサーブレット
  • サーブレットj_security_checkがサーバー上で呼び出されます。有効なのはj_usernamej_passwordです。 If authenication is successful, the request is forwarded/redirected to the secured pageIf the authentication fails, the error page is sent(login-configで設定されています)。

BASICログイン:

  • クライアントが保護されたページへのリクエスト/application/securedpage
  • サーバーになりAuthorization header with value containing Base64 encoded username and passowrdを送信するためにクライアントを尋ねる401 status codeを送ります。
  • ブラウザには、ユーザー名とパスワードを尋ねるポップアップが表示されます。
  • ブラウザは再び保護されたページへのリクエストを
  • If authenication is successful, the request is forwarded/redirected to the secured pageと一緒に行います。 If the authentication fails, again the challange i.e, 401ステータスコード 'がブラウザに送信されます。
  • ブラウザには、ユーザ名とパスワードを尋ねるポップアップが再び表示されます。

    基本的なログインフローでは、応答本文の送信先が明確に示されていません。 Severは初回または認証に失敗した場合に資格情報を要求するために401 status codeのみを送信します。

+0

hello Ramesh;それは合理的な答えのようですが、私は確信していません。 : ' - )これをどうやって確認する? –

+0

追加された詳細な回答 –

+1

これはあまり適切ではありません - 401レスポンスはボディを含むかもしれません。 [W3 HTTPステータスコードの定義](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2)は、次のように述べています:_ [...]ユーザーエージェントが既に少なくとも1回は認証を試みたそのユーザーには関連する診断情報が含まれている可能性があるので、ユーザーは応答で与えられたエンティティを提示すべきです(SHOULD)。_ – botchniaque

1

HTTP基本認証エラーページは、デフォルトでサーブレットコンテナ独自のHTTP 401エラーページであるHTTP 401エラーです。 web.xmlにカスタムHTTP 401エラーページを指定するだけです。

<error-page> 
    <error-code>401</error-code> 
    <location>/loginError.jsp</location> 
</error-page> 
+0

@Balucブラウザは401ステータスコードのバックグラウンドでエラーページを表示します。私はポップアップが再び資格情報を求めて表示されると思っています。申し訳ありませんが、私はこれを試していないので尋ねています。 –

0

私はここの2つの例では、非常に有用であることが判明:https://svn.java.net/svn/javaeetutorial~svn/trunk/examples/security/hello2_basicauth/https://svn.java.net/svn/javaeetutorial~svn/trunk/examples/security/hello1_formauth/。 (あなたはWhere can I download Java EE 6 Tutorial Examples?ですべてのJava EE 6の例をチェックアウトできます)あなたが尋ねている2つのアプローチを示しています。ヒント:私のようなセキュリティの初心者のために、私はhttps://addons.mozilla.org/en-US/firefox/addon/live-http-headers/が盗聴に非常に役立つことを発見しました。