検索
連載

Tomcat 7も対応したServlet 3.0の変更点 後編Tomcat 7の新機能で何ができるようになるのか?(2)(2/3 ページ)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

認証用APIとセキュリティ制約の追加

 セキュリティ対応については認証用APIとセキュリティ制約の追加について紹介します。

認証用APIの追加

 Servlet 3.0からServlet APIに以下の認証用メソッドが追加されました。

  • HttpServletRequest#login(String username, String password)
  • HttpServletRequest#logout()
  • HttpServletRequest#authenticate(HttpServletResponse response)

 上記メソッドを利用すると標準のServlet APIを利用して独自の認証プログラムを作成できます。

 認証メソッドは「login(String username, String password)」「authenticate (HttpServletResponse response)」の2種類が用意されています。

 authenticateメソッドではTomcatがデフォルトで提供している認証スキーム(BASIC、CLIENT-CERT、DIGEST、FORM、NONEなど)を利用して認証します。従って、にBASICを指定した場合、authenticateメソッドを呼び出すことで、BASIC認証ができます。

 loginメソッドではTomcatが提供する認証スキームを利用せず、指定されたユーザーとパスワードで直接Realm認証を行います。Realm認証の前後にプログラミングにより自由に処理を追加できるため、独自の認証スキームも作成可能です。

 loginメソッドとauthenticateメソッドのどちらを利用する場合でもRealmを切り替えることでユーザー名とパスワード、ロールを管理するデータベースを切り替えられます(参考:Apache Tomcat 7 Configuration Reference (7.0.14) - The Realm Component)。

 logoutメソッドでは、ログアウト処理を行います。logoutメソッドを呼び出すことで認証情報をリクエストやセッションから削除します。

 以下は、認証用APIの簡単なサンプルです。

LoginServlet

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 サンプルではリクエストから取得したユーザー名とパスワードを利用して、ログイン認証を行います。

セキュリティ制約と追加

 Servlet 3.0ではsecurity-constraintを追加する方法として3つの方法を提供しています。

  • deployment descriptorにを設定する方法
  • ServletRegistrationインターフェイス(※前回の「Pluggability and Extendibility」の「【2】プログラムによるWebアプリケーションの拡張」を参照)のsetServletSecurityメソッドを利用して設定する方法
  • アノテーション(※前回の「アノテーションで開発が簡単に」参照)を利用して設定する方法

 今回はアノテーションによるセキュリティ制約の追加を紹介します。

 Servlet 3.0から「@ServletSecurity」アノテーションが追加されました。@ServletSecurityではアノテートしたServlet・Filterに対してセキュリティ制約を追加でき、web.xmlのと同様の制約を付与できます。

 また、@ServletSecurityの内部で利用するアノテーションとして「@HttpConstraint」「@HttpMethodConstraint」も追加されています。

 @HttpConstraintでは、@HttpMethodConstraintが制約しない全てのHTTPメソッドに対して適用されるセキュリティ制約を表現するために利用されます。@HttpMethodConstraintは特定のHTTPメソッドのセキュリティ制約を表現するために利用されます。

 今回も基本的な制約の例をサンプルとして掲載します。より詳しい使い方はServlet 3.0の仕様書を確認してください。

 以下では、全てのHTTPメソッドに対して、アクセスを拒否しています。

DenyServlet

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 以下では、全てのHTTPメソッドからのアクセスに対して、「Role="role1"」を要求します。

AllMethodRestrictServlet

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 以下では、GETメソッドからのアクセスに対してはセキュリティ制約なし、それ以外のメソッドに対しては、「Role="role2"」を要求します。

ExcludeGetMethodRestrictServlet

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 GETメソッドからのアクセスに対しては「Role="role3"」を要求しています。それ以外のメソッドに対しては、セキュリティ制約はありません。

GetMethodRestrictServlet

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 次ページで、残りの2つを説明します。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る