Jsp-security
JSP-セキュリティ
JavaServer Pagesとサーブレットは、Web開発者がアプリケーションを保護するためにいくつかのメカニズムを利用できるようにします。 リソースは、アプリケーションデプロイメント記述子でリソースを識別し、ロールを割り当てることにより、宣言的に保護されます。
識別子とパスワードを使用した基本認証から証明書を使用した高度な認証まで、いくつかのレベルの認証を利用できます。
役割ベースの認証
サーブレット仕様の認証メカニズムは、*ロールベースのセキュリティ*と呼ばれる技術を使用しています。 アイデアは、ユーザーレベルでリソースを制限するのではなく、ロールを作成し、ロールごとにリソースを制限することです。
confのTomcatのホームディレクトリにある tomcat-users.xml ファイルで異なるロールを定義できます。 このファイルの例を以下に示します-
このファイルは、 username、password 、および role 間の単純なマッピングを定義します。 特定のユーザーが複数のロールを持つ場合があることに注意してください。たとえば、 username = "both" は、「tomcat」ロールと「role1」ロールにあります。
さまざまなロールを特定して定義したら、WEB-INFディレクトリにある web.xml ファイルの <security-constraint> 要素を使用して、さまざまなWebアプリケーションリソースにロールベースのセキュリティ制限を設定できます。
以下はweb.xmlのサンプルエントリです-
上記のエントリは意味します-
フォームベース認証
FORM認証方法を使用する場合、ユーザーにユーザー名とパスワードの入力を求めるログインフォームを提供する必要があります。 以下は login.jsp の簡単なコードです。 これは、同じ目的のためにフォームを作成するのに役立ちます-
ここでは、ログインフォームに j_username および j_password という名前のフォーム要素が含まれていることを確認する必要があります。 <form> タグ内のアクションは j_security_check でなければなりません。 POST をフォームメソッドとして使用する必要があります。 同時に、 <login-config> タグを変更してauth-methodをFORMとして指定する必要があります-
ログインが成功し、呼び出し元が保護されたリソースへのアクセスを許可されている場合、コンテナはセッションIDを使用して、その時点から呼び出し元のログインセッションを識別します。 コンテナは、セッションIDを含むCookieを使用してログインセッションを維持します。 サーバーはCookieをクライアントに送り返し、呼び出し元が後続の要求でこのCookieを提示する限り、コンテナーは呼び出し元が誰であるかを知っています。
ログインに失敗した場合、サーバーはform-error-page設定で識別されるページを送り返します
ここで、 j_security_check は、フォームベースのログインを使用するアプリケーションがログインフォームに指定する必要があるアクションです。 同じフォームで、 j_username というテキスト入力コントロールと j_password という*パスワード入力コントロール*も必要です。 これを見ると、フォームに含まれている情報がサーバーに送信され、名前とパスワードがチェックされます。 これを行う方法はサーバー固有です。
Standard Realm Implementationsをチェックして、 j_security_check がTomcatコンテナに対してどのように機能するかを理解してください。
サーブレット/JSPのプログラムセキュリティ
S.No. | Method & Description |
---|---|
1 |
String getAuthType()
|
2 |
boolean isUserInRole(java.lang.String role)
|
3 |
String getProtocol()
|
4 |
boolean isSecure()
|
5 |
Principle getUserPrinciple()
|
たとえば、マネージャーのページにリンクするJavaServer Pageの場合、次のコードがあります-
JSPまたはサーブレットでユーザーのロールを確認することにより、Webページをカスタマイズして、ユーザーがアクセスできるアイテムのみを表示できます。 認証フォームに入力されたユーザー名が必要な場合は、リクエストオブジェクトで getRemoteUser メソッドを呼び出すことができます。