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>