WebLogic Serverセキュリティ・システムでは、Java EEセキュリティがサポートおよび拡張され、様々なセキュリティ・データベースまたはセキュリティ・ポリシーと統合するようカスタマイズできるセキュリティ・プロバイダが豊富に用意されています。
Spring Security Webサイト(http://static.springsource.org/spring-security/site/)に記述されているように、Acegi Securityは現在はSpring Securityであり、Spring Portfolioの公式のセキュリティ・プロジェクトです。Springセキュリティのフレームワークは、Springアプリケーションにセキュリティを提供し、豊富なセキュリティ・プロバイダを含みます。
問題は、2つのセキュリティ・フレームワークをどうやって統合するかです。
Java EEとSpringアプリケーションを統合すると、両方のセキュリティ・フレームワークを使用した認証は必要なくなり、WLSセキュリティとSpringセキュリティが連携します。WLSセキュリティが、セキュリティ・レルムのデフォルトの認証プロバイダで認証を処理し、マッパー・クラスを使用してWLSプリンシパルをSpring GrantedAuthorityプリンシパルに変換します。ユーザーはWLSセキュリティによって認証されると、Springセキュリティに対して認証されます。したがって、アプリケーション内のオブジェクトを保護する方法を決定できます。一般的なのは、Java EEリソースをWeblogicセキュリティで保護し、SpringリソースをSpringセキュリティで保護する方法です。
Spring Securityのリファレンスでも説明されているように、コンテナ・アダプタを使用することで、エンド・ユーザー・アプリケーションをホストするコンテナ(この場合はWebLogic Server)に直接Spring Securityを統合できます。
コンテナとSpring Securityは、アダプタを介して統合されます。アダプタは、コンテナと互換性のあるユーザー認証プロバイダを提供し、コンテナと互換性のあるユーザー・オブジェクトを返す必要があります。
applicationContext-acegi-security.xmlはSpringセキュリティの構成ファイルです。Weblogic Serverでは、applicationContext-acegi-security.xml内のフィールドのリストに、WeblogicAuthenticationFilterが追加されています。このフィルタは、マッパーに基づいてWebLogicプリンシパルをSpring GrantedAuthorityサブジェクトに変換するために使用します。マッパーは、WeblogicAuthenticationFilterのプロパティとして構成するもので、作成時に注入されます。
次に、マッパー・クラスの例を示します。
public class MyAuthorityGranter implements AuthorityGranter {
public Set grant(Principal principal) {
Set rtnSet = new HashSet();
if (principal.getName().equals("fred@oracle.com")) {
rtnSet.add("ROLE_SUPERVISOR");
rtnSet.add("IS_AUTHENTICATED_ANONYMOUSLY");
}
return rtnSet;
}
}
この例では、WebLogic domainであるユーザーfred@oracle.comは、ROLE_SUPERVISORおよびIS_AUTHENTICATED_ANONYMOUSLYにマップされます。
applicationContext-acegi-security.xmlファイルをプラグインするには、web.xmlに次のコードを追加します。
<filter><filter-name>Acegi Filter Chain Proxy</filter-name><filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class><init-param><param-name>targetClass</param-name><param-value>org.acegisecurity.util.FilterChainProxy</param-value></init-param></filter><filter-mapping><filter-name>Acegi Filter Chain Proxy</filter-name><url-pattern>/main/secure/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext-acegi-security.xml</param-value></context-param>