ヘッダーをスキップ
Oracle® Fusion Middleware WebLogic Server での Spring のサポート
11g リリース 1 (10.3.1)
B55577-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

3 Weblogic Spring セキュリティ統合

WebLogic Server セキュリティ システムでは、Java EE セキュリティがサポートおよび拡張され、さまざまなセキュリティ データベースまたはセキュリティ ポリシーと統合するようカスタマイズできるセキュリティ プロバイダが豊富に用意されています。

Spring Security Web サイト (http://www.acegisecurity.org/) の説明に従って、Acegi Security は Spring Security で、Spring ポートフォリオの正式なセキュリティ プロジェクトです。Spring セキュリティ (acegi) は、Spring アプリケーションにセキュリティを追加すると同時に、豊富なセキュリティ プロバイダを提供します。

問題は、これら 2 つのセキュリティ フレームワークをどうやって統合するかです。

J2EE と Spring アプリケーションを統合すると、両方のセキュリティ フレームワークを使用した認証は必要なくなり、WLS セキュリティと Spring セキュリティが連携します。WLS セキュリティが、セキュリティ レルムのデフォルトの認証プロバイダで認証を処理し、マッパー クラスを使用して WLS プリンシパルを Spring GrantedAuthority プリンシパルに変換します。ユーザは WLS セキュリティによって認証されると、Spring セキュリティに対して認証されます。したがって、アプリケーション内のオブジェクトを保護する方法を決定できます。一般的なのは、Java EE リソースを Weblogic セキュリティで保護し、Spring リソースを Spring セキュリティで保護する方法です。

Spring コンテナ アダプタによる統合

Spring Security のリファレンスでも説明されているように、コンテナ アダプタを使用することで、エンド ユーザ アプリケーションをホストするコンテナ (この場合は WebLogic Server) に直接 Acegi Security を統合できます。

コンテナと Acegi 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>