ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic ServerでのSpringのサポート
11g リリース1 (10.3.6)
B61651-04
  目次へ移動
目次

前
 
次
 

3 Weblogic Springセキュリティ統合

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コンテナ・アダプタによる統合

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にプラグインする方法

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>