3

こんにちは、Webapp の一部のページを保護するために基本認証方式を使用しています。次のように指定された URL パターンがあります。

<url-pattern>/Important/*</url-pattern>
<auth-method>BASIC</auth-method>

問題は、ユーザーがログインフォームを使用して通常の方法でログインした場合です。データは、ユーザー名とパスワードを検証してからさらに進むサーブレットに投稿されます。ユーザーが重要なフォルダーのページにアクセスしようとすると、認証入力が再び表示されるため、このサーブレットでRemoteUserを設定できる方法はありますか? ユーザーが既にサインインしていることを認証メカニズムに通知する方法はありますか?

4

2 に答える 2

3

これは不可能です。実際<form>にログイン用の HTML がある場合は、認証方法を からBASICに変更する必要がありますFORM

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

また、事前定義されたパラメーターとしてユーザー名とパスワードを使用して、HTML<form>が事前定義された URL に送信されることを確認する必要があります。j_security_checkj_usernamej_password

<form action="j_security_check" method="post">
    <input type="text" name="j_username" />
    <input type="password" name="j_password" />
    <input type="submit" value="login" />
</form>

このようにして、コンテナは必要な方法でログインを設定し、ユーザー名は で利用できるようになりますgetRemoteUser()。また、制限された URL に直接アクセスする認証されていないユーザーは、自動的にログイン ページに転送されます。ログインに成功すると、最初に要求されたページに自動的に戻されます。

また、FORMServlet 3.0 対応のコンテナ (Tomcat 7、Glassfish 3 など) で認証方式を使用する場合、サーブレットに Servlet 3.0 で導入された方式でプログラムからユーザーをログインさせることができHttpServletRequest#login()ます。これにより、プロセスと検証をより細かく制御できます。BASICこれは認証では不可能です。

BASIC認証はまったく別のものです。これは、ユーザー名とパスワードを入力する JavaScript のようなダイアログを表示します。これは、HTML<form>などを必要としない/使用しません。また、後続のすべてのリクエストでリクエストヘッダーとして送信される認証情報をクライアント側に保存します。認証のようにサーバー側のセッションに認証情報を保存しませんFORM

以下も参照してください。

于 2012-06-27T12:36:18.233 に答える
0

ユーザーがログインしていない場合、メソッド HttpServletRequest.getRemoteUser() は戻ります。null

これは、すべてのタイプの認証に当てはまります。

APIドキュメントの内容は次のとおりです。

java.lang.String getRemoteUser()

Returns the login of the user making this request, if the user has been 
authenticated, or null if the user has not been authenticated. Whether the user 
name is sent with each subsequent request depends on the browser and type of      
authentication. Same as the value of the CGI variable REMOTE_USER.

Returns:
    a String specifying the login of the user making this request, 
   or null if the user login is not known
于 2012-06-27T11:56:57.830 に答える