SpringSourceは、2009年12月23日のSpring Security 3.0.0(現在はメンテナンスリリース3.0.7)以来のメジャーリリースとなる、Spring Security 3.1.0をリリースした。以下はSpring Security 3.1.0の新機能である。
- 複数のhttp要素
異なるリクエストパターン用に異なるセキュリティフィルタチェインを定義できるよう、複数のhttp要素を作ることができるようになった。http要素のpattern属性が指定されていなければ、全てのリクエストパターンにマッチする。より強力なマッチングを実現できる、request-matcher属性もサポートされ続ける。これは主に、ひとつのアプリケーションでステートフルなURLとステートレスなURLを両方サポートするようなケース(例えば、WebアプリケーションとRESTサービスで異なるセキュリティ設定を指定する)で使われるだろう。また、security属性にnoneを指定することで、セキュリティフィルタを迂回することもできるようになった。
<http pattern="/resources/**" security="none" /> <http> ... </http>
- http@create-sessionのステートレスオプション
create-session="stateless"を指定すると、Spring Securityはセッションを作らなくなる。これは、「セッションは作成させないが、もしアプリケーションが作成した既存のセッションがあればそれを使用する」ことを意味する、既存のcreate-session="never"とは異なる。
<http create-session="stateless">
- debug要素
この要素はデバッグサポートを有効にし、フィルタチェインにマッチしたリクエストの情報や新しいセッションの作成が表示されるようになる。なお、表示される内容には機密情報が含まれている可能性があるので、開発環境でのみ使うように注意する必要がある。
<http> ... </http> <debug />
- ActiveDirectoryLdapAuthenticationProvider
Active Directoryは標準のLDAPとは異なっているが広く使われている。ActiveDirectoryLdapAuthenticationProviderはActive Directoryとのよりよい連携のために作成された。
- Cryptoモジュール
Spring SecurityのCryptoモジュールは、対称鍵暗号、キー生成、パスワードのエンコードをサポートする。このモジュールにより、EncryptorsやKeyGenerators、PasswordEncoderといったクラスが導入される。
- Servlet 3.0のHttpOnly
Servlet 3.0環境における、CookieのHttpOnlyフラグがサポートされた。HTTPレスポンスのヘッダーにHttpOnlyフラグが含まれていると、JavaScriptのようなクライアントサイドスクリプトからクッキーにアクセスできなくなる。これはクロスサイトスクリプティング(XSS)攻撃を防ぐのに役立つ。ただし、これはサーバとブラウザの両方がHttpOnlyフラグをサポートしていないと、うまく機能しない。
- remember-me@use-secure-cookie
remember-meクッキーは"secure"フラグを立て、HTTPSでのみサブミットした方がよい。デフォルトでは、リクエストがセキュアならば、クッキーはセキュアである。
<http> ... <remember-me key="..." use-secure-cookie="true" /> </http>
- InMemoryUserDetailsManager
InMemoryUserDetailsManagerはUserDetailsManagerの非永続化版であり、インメモリマップが使われる。これは、永続化の必要がない、開発やテスト環境での利用を意図したものである。
- authorizeタグのhasPermission式
authorize JSPタグでhasPermission式がサポートされた。
<sec:authorize access="hasPermission(#var, 'permission')">
- UI Securityの無効化
通常はauthorizeタグによって隠されるUI部分を、表示することができるようになった。これにより、URLが実際にセキュアになっているかどうかを簡単に確認することができるようになる。spring.security.disableUISecurityプロパティが"true"になっていれば、コンテンツが表示される。これらの"隠し"エリアは、<span class="securityHiddenUI">で囲まれるので、CSSを使ってこの部分を区別することが可能だ。
- authentication-manager@erase-credentials
erase-credentials属性がtrueにセットされていると、AuthenticationManagerはユーザが認証された時点で、返されたAuthenticationオブジェクト中の認証情報のクリアを試みる。この値は、ProviderManagerのeraseCredentialsAfterAuthenticationプロパティにマップされる。これは、Spring Security 3.1のデフォルトの動作である。
<http> ... </http> <authentication-manager erase-credentials="true"> ... </authentication-manager>
- logout@delete-cookies
ログアウト時のクッキーのクリアがサポートされた。delete-cookies属性には、ユーザがログアウトした際にSpring Securityに削除させたいクッキー名を、カンマ区切りで複数指定することができる。
<http> ... <logout delete-cookies="cookieName1, cookieName2, ..." /> </http>
- CASプロキシチケット
CAS(中央認証サービス)プロキシチケットがサポートされた。Spring Securityは"ticket"リクエストパラメータを使って、CASプロキシチケットをサポートする。
- JAAS構成のインジェクション
JAAS(Java認証・承認サービス)構成の複数の実装がサポートされた。JAASのサポートにより、クラスを拡張する必要なしに、Springの構成のみで設定できるようになる。
- ネストされたユーザ切り替えの防止
SwitchUserFilter(ユーザコンテキストの切り替えを行うフィルタ)はネストされたユーザ切り替えをサポートしなくなった。それぞれの切り替えの前にはattemptExitUserメソッドが呼び出されるようになった。
- http@authentication-manager-refとglobal-method-security@authentication-manager-ref
複数のセキュリティフィルタチェインを定義できるようになったのに関連し、それぞれに別々のAuthenticationManagerを指定できるようになった。
<global-method-security authentication-manager-ref="..."> <http authentication-manager-ref="..."> <authentication-manager alias="...">
- http@name
http要素は、コンテキスト内のどこかからbeanを参照するために使われる、name属性を持った。
<http name=""> ... </http>
- http@request-matcher-refとfilter-chain@request-matcher-ref
request-matcher-ref属性は、このフィルタチェインが使われるかどうかを決める、RequestMatcherインターフェースを実装したbeanを参照する。これはhttp@patternのより強力な代替機能である。ビルトインのELRequestMatcherやIpAddressMatcherを使うこともできるし、カスタムのRequestMatcherを作成することもできる。
<http request-matcher-ref="..."> ... </http>
- 名前空間によるAuthenticationDetailsSource
認証フィルタによって使用される名前空間によるAuthenticationDetailsSourceの設定をサポートした。AuthenticationDetailsSourceは与えられたWebリクエストの詳細を保持したオブジェクトを提供する。form-login@authentication-details-source-refやopenid-login@authentication-details-source-ref、http-basic@authentication-details-source-ref、x509@authentication-details-source-refも参照のこと。
- http/expression-handler
カスタム式ベースのアクセスコントロールを提供するhttp/expression-handlerがサポートされた。これは、式ベースのアクセスコントロールが有効な時に使われる、SecurityExpressionHandlerを実装したSpring beanへの参照を定義する。指定されなかった場合は、ACLサポートなしのデフォルト実装が使われる。
<global-method-security expression-handler="..."> <http expression-handler="...">
- http-basic@entry-point-ref
これはBasicAuthenticationFilterのためのAuthenticationEntryPointを設定する。BasicAuthenticationFilterはリクエストのBASIC認証ヘッダを処理し、結果をSecurityContextHolderに格納する。
<http> ... <http-basic entry-point-ref="..." /> </http>
- remember-me@authentication-success-handler-ref
authentication-success-handler-ref属性は、もしカスタムナビゲーションが必要であれば、RememberMeAuthenticationFilterのauthenticationSuccessHandlerプロパティを設定する。この属性の値には、ユーザ認証成功時の処理に使用されるAuthenticationSuccessHandler beanの名前を指定する。もっとも一般的な利用シーンは、リダイレクトやフォワードを使った、後続のURLへのナビゲーション制御である。
<http> ... <remember-me key="..." authentication-success-handler-ref="..." /> </http>
- method-security-metadata-sourceとglobal-method-security@metadata-source-ref
method-security-metadata-source要素は、メソッドをキーとしてルックアップ処理を行うようにデザインされたSecurityMetadataSourceを表す、MethodSecurityMetadataSourceのインスタンスを作成する。MethodSecurityMetadataSourceのインスタンスは、デフォルトアノテーションのような他のソースよりも優先される。 また、use-expressions属性は、
要素の'access'属性中での、式を利用を有効化する。 <global-method-security metadata-source-ref="id"> <http> ... </http> <method-security-metadata-source id="id" use-expressions="..." />
- global-method-security@mode
modeは、デフォルトのSpring AOPの代わりにAspectJを使うように指定するための属性である。
<global-method-security mode="aspectj">
- attribute-exchange
attribute-exchange要素は、OpenIDプロバイダによって取得される属性のリストを定義する。 複数のattribute-exchange要素を定義することが可能だが、各々の要素にはOpenIDの識別子にマッチするidentifier-match属性を持たせなければならない。これは、様々な属性リストを、様々なアイデンティティプロバイダに提供することを可能にする。
<http> ... <openid-login> <attribute-exchange> <openid-attribute name="..." type="..." /> </attribute-exchange> </openid-login> </http>
- http@jaas-api-provision
もし可能であれば、JaasApiIntegrationFilter beanのスタックへの追加によって実装された、JaasAuthenticationTokenから取得したSubjectとしてリクエストを実行する。この値はデフォルトでfalseである。
<http jaas-api-provision="..."> ... </http>
- form-login@username-parameterとform-login@password-parameter
form-login要素へのリクエストパラメータの指定が可能になった。username-parameter属性はユーザ名を含むリクエストパラメータを指定する(デフォルトでは"j_username")。password-parameter属性はパスワードを含むリクエストパラメータを指定する(デフォルトでは"j_password")。
<http> <form-login username-parameter="..." password-parameter="..." /> </http>
Springコミュニティダウンロードから、Spring Security 3.1.0をダウンロードすることができる。Mavenのユーザであれば、groupIdをorg.springframework.security、artifactIdパターンをspring-security-*、依存バージョンを3.1.0とすればよい。なお、新しいSpring Securityのスキーマを使うため、Spring SecurityのXMLファイルの中でhttp://www.springframework.org/schema/security/spring-security-3.1.xsdを指定するのを忘れないこと。
さらに詳しい情報を知りたい場合は、Spring Security 3.1のオフィシャルリファレンスドキュメントを参照して欲しい。Spring Securityのソースコードは、Gitリポジトリ(git://git.springsource.org/spring-security/spring-security.git)からクローン可能だ。