ユーザーのログインに関連するプロセスを理解しようとしています。リクエスト/レスポンスのヘッダーにアクセスするには、サーブレットを作成する必要があると言われました。
そのため、ヘッダー情報を取得し、ユーザーがデータベース内の有効なユーザーであることを確認します。その場合、このユーザーとのセッションを設定します。そうでない場合は、登録ページに移動します。
私の問題は、このサーブレットを呼び出すものを理解することです。「このサーブレットを呼び出すには開始ページが必要ですか?」
ユーザーのログインに関連するプロセスを理解しようとしています。リクエスト/レスポンスのヘッダーにアクセスするには、サーブレットを作成する必要があると言われました。
そのため、ヘッダー情報を取得し、ユーザーがデータベース内の有効なユーザーであることを確認します。その場合、このユーザーとのセッションを設定します。そうでない場合は、登録ページに移動します。
私の問題は、このサーブレットを呼び出すものを理解することです。「このサーブレットを呼び出すには開始ページが必要ですか?」
... リクエスト/レスポンスのヘッダーにアクセスする ... ヘッダー情報を取得する ...
BASIC
HTTP認証がどのように機能するかを説明しています。これはよく知られた JavaScript アラートのようなポップアップで、ユーザー名とパスワードを要求し、不正確な資格情報が提供されると HTTP 401 Not Authorized エラーが発生します。これは、通常、サーブレットではまったく実行されず、特定のweb.xml
構成設定によって実行される Java EE Web アプリケーションにあります。次のようになります。
<security-constraint>
<web-resource-collection>
<web-resource-name>secured</web-resource-name>
<url-pattern>/secured/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>someRoleName</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
ユーザーとロールの場所は、サーブレットコンテナ自体で構成されます。これは、XML ファイルまたはデータベースです。設定方法については、キーワード「realm」を使用して、サーブレットコンテナ固有のドキュメントを参照する必要があります。たとえば、Tomcat の場合はTomcat Realm HOWTOです。
もう 1 つの方法はFORM
ベース認証ですが、最初に要求したように、リクエスト ヘッダーによってログイン情報を渡す必要はありません。また、これはコンテナーの組み込みメカニズムによって自動的に実行されるため、通常、サーブレットはまったく関与しません。<login-config>
上から下に変更するだけです。
<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>
には、事前定義された要求パラメーターとしてユーザー名とパスワードを使用して、login.jsp
POST によって事前定義された URL に送信する HTML フォームが必要です。j_security_check
j_username
j_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>
これには、生の JavaScript に似たダイアログを表示する代わりに、適切な HTML/CSS/JS を使用してページをログイン フォームで表示できるという利点があります。
サーブレットは、 を呼び出してプログラムによるログインを実行する場合にのみ使用されていますrequest.login(username, password)
。このメソッドは、Servlet 3.0 (Tomcat 7、Glassfish 3 など) 以降で新しく追加されました。<security-constraint>
これには、コンテナー内のinweb.xml
と realmが必要であることに注意してください。また、サーブレットは、コンテナー管理認証を使用する代わりにサーブレット フィルターを使用して認証を自作する場合にのみ使用されます。サーブレットでは、ログインしているユーザーの独自のデータベース モデル表現をセッションに保存しsession.setAttribute("user", user)
て、フィルターがそれをインターセプトできるようにする必要があります。
JDeveloper はこれとは無関係であることに注意してください。これは、Java Web アプリケーションを簡単に開発するための単なるツール (IDE) です。Eclipse、Netbeans、IntelliJ、さらにはメモ帳でも同じことができます。
また、実装するセキュリティの種類によっても異なります。IDストアはRDBMS(私が想定する表)であり、コンテナ管理とカスタムの2種類の認証を実装できると述べています。カスタム認証 (あまりお勧めしません) では、ユーザーにユーザー名とパスワードのペアを要求し、それをデータベース内のユーザーと比較します。これには自動化された認証チェックはなく、ユーザーが保護されたリソースにアクセスするときに認証されるようにするには、サーブレット フィルターが必要になります。
コンテナー管理 - 前の回答で示されている - では、認証をコンテナーに委任できます。この場合、作成するアプリケーション (これについてはより具体的に説明することができます) は、認証と認証追跡自体を処理せず、web.xml の構成を通じて、認証のために要求をコンテナーにリダイレクトするだけです。
ほとんどのアプリケーション サーバーでは、アイデンティティ ストアを構成して、ユーザーを認証することができます。JDeveloperのデフォルトであるWebLogicサーバーでは、LDAP、Active Directory、OID、WLSの統合LDAP、およびSQL/Tableがこれに該当します。後者は、定義済みの認証プロバイダ (SQL 認証プロバイダ) であり、データベース テーブルに対してユーザーを認証するように WLS コンテナをコンフィグレーションできます。
そのため、SQL 認証プロバイダーを使用してコンテナー管理認証をフォローアップすることをお勧めします。