Spring Module - Mule 4

Spring Module v1.3

Spring Module により、Mule アプリケーションで Spring Framework を使用できます。

リリースノート: Spring Module リリースノート
Exchange: Spring Module

プロジェクトへの Spring Module の追加

Anypoint Studio 7 では、デフォルト設定で Spring Module が提供されます。

[Mule Palette (Mule パレット)]​ で、「Spring」を検索し、Authorization Filter 操作を Studio キャンバスにドラッグします。

Spring Module を設定する

  1. 次の設定を追加します。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <mule xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
          xmlns="http://www.mulesoft.org/schema/mule/core"
          xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
            http://www.mulesoft.org/schema/mule/core/current/mule.xsd
            http://www.mulesoft.org/schema/mule/spring
            http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd">
    
        <spring:config name="springConfig" files="beans.xml" />
    
    </mule>
  2. beans.xml​ ファイルを ​src/main/resources​ に格納します。

    Spring 設定が有効でなければなりません。beans.xml ファイルの例を次に示します。

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    
        xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
          http://www.springframework.org/schema/jdbc
          http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-4.2.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-4.2.xsd">
    
        <jdbc:embedded-database id="dataSource" type="DERBY">
            <jdbc:script location="classpath:db/sql/create-db.sql" />
            <jdbc:script location="classpath:db/sql/insert-data.sql" />
        </jdbc:embedded-database>
    
    </beans>

アプリケーションを起動するには、Spring Module で使用する beans ファイルをエクスポートする必要があります。​「リソースのエクスポート方法」​を参照してください。

Anypoint Studio 7.2 以降を使用している場合、​mule-artifact.json​ ファイルを手動で更新する必要はありません。

Mule では、Spring bean が宣言される記述子も必要であるため、Studio 内の埋め込みパッケージャーにより、プロジェクトから取得するすべてのリソースを使用して自動的に生成されます。ただし、エクスポートする必要のあるリソースを宣言する場合、Studio によってそれらのリソースのみがパッケージ化されます。

次の例では、​mule-artifact.json​ で ​beans.xml​ ファイルを宣言できるようにしています。

{
    "name": "MyApp",
    "minMuleVersion": "4.2.1",
    "classLoaderModelLoaderDescriptor": {
        "id": "mule",
        "attributes": {
            "exportedResources": [
                "/org/mule/myapp/beans.xml"
            ]
        }
    }
  }
}

Mule コンポーネントの Spring オブジェクト

次のように Spring オブジェクトを Mule 設定コンポーネントで使用することで、たとえば、Spring Bean で作成した Derby データソースを参照できます。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:db="http://www.mulesoft.org/schema/mule/db"
      xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
      xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
        http://www.mulesoft.org/schema/mule/core/current/mule.xsd
        http://www.mulesoft.org/schema/mule/spring
        http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd
        http://www.mulesoft.org/schema/mule/db
        http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">

    <spring:config name="springConfig" files="beans.xml" />

    <db:config name="derbyConfig" doc:name="Database Config"  >
        <db:derby-connection database="datasource" create="true" />
    </db:config>
</mule>

Spring プロパティプレースホルダー

Spring プロパティプレースホルダーで定義されたプロパティを Mule アプリケーション内で使用することはできません。これらは、Spring 設定ファイルでのみ使用できます。ただし、Mule で ​<configuration-properties/>​ を使用して定義したプロパティは、Spring 設定ファイルで使用できます。

Spring オブジェクトの制限

Spring Module を使用するには、実装と挿入の制限を考慮してください。

  • Spring オブジェクトでは、Mule API ライフサイクルメソッドを実装することはできません。

  • Spring オブジェクトは、Mule API サービスでは挿入できません。使用できる唯一のサービスは ​org.mule.runtime.api.artifact.Registry​ で、Mule API 内の他のすべてのサービスへのアクセスに使用できます。この場合は、​@PostConstruct​ をメソッドに対して使用することで、オブジェクトを初期化して Mule API サービスを取得します。

Spring セキュリティのセキュリティマネージャーとしての使用

プレーンテキストのパスワードで Spring Framework 5.x を使用している場合は、パスワード値の先頭に ​{noop}​ を付ける必要があります。たとえば、パスワード ​admin​ は ​{noop}admin​ になります。

Spring Module では、Spring セキュリティを Mule アプリケーションのセキュリティマネージャーとして使用できます。 Spring 設定ファイルで認証マネージャーを定義する必要があります。

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  xmlns:ss="http://www.springframework.org/schema/security"

  xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
      http://www.springframework.org/schema/jdbc
      http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.2.xsd
      http://www.springframework.org/schema/security
      http://www.springframework.org/schema/security/spring-security-4.2.xsd">

  <ss:authentication-manager alias="authenticationManager">
    <ss:authentication-provider>
      <ss:user-service id="userService">
        <ss:user name="admin" password="admin" authorities="ROLE_ADMIN" />
        <ss:user name="joe" password="secret" authorities="ROLE_ADMIN" />
        <ss:user name="anon" password="anon" authorities="ROLE_ANON" />
        <ss:user name="user" password="password" authorities="ROLE_ANON" />
        <ss:user name="ross" password="ross" authorities="ROLE_ANON" />
        <ss:user name="marie" password="marie" authorities="ROLE_ANON" />
      </ss:user-service>
    </ss:authentication-provider>
  </ss:authentication-manager>

</beans>

Spring 認証マネージャーを活用した Mule アプリケーションのセキュリティマネージャーは、次のように定義できます。

<?xml version="1.0" encoding="UTF-8"?>
<mule
  xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core
    http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/spring
    http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd">

  <spring:config name="springConfig" files="beans.xml" />

  <spring:security-manager>
    <spring:delegate-security-provider
      name="memory-provider"
      delegate-ref="authenticationManager" />
  </spring:security-manager>

</mule>

Spring 認証検索条件を使用した認証の検証

Spring Module は、Mule セキュリティマネージャーを使用して認証を検証できない場合に失敗する検索条件をサポートします。

<?xml version="1.0" encoding="UTF-8"?>
<mule
  xmlns:http="http://www.mulesoft.org/schema/mule/http"
  xmlns:db="http://www.mulesoft.org/schema/mule/db"
  xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core
    http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/spring
    http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd
    http://www.mulesoft.org/schema/mule/db
    http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
    http://www.mulesoft.org/schema/mule/http
    http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">

  <spring:config name="springConfig" files="beans.xml" />

  <spring:security-manager>
    <spring:delegate-security-provider
      name="memory-provider"
      delegate-ref="authenticationManager" />
  </spring:security-manager>

  <http:listener-config
    name="HTTP_Listener_config"
     doc:name="HTTP Listener config"  >
      <http:listener-connection
        host="0.0.0.0"
        port="9090" />
  </http:listener-config>

  <flow name="spring-exampleFlow"  >
    <http:listener
      config-ref="HTTP_Listener_config"
      path="/"
      doc:name="Listener"  />
    <http:basic-security-filter
      realm="mule" />
      <spring:authorization-filter
        requiredAuthorities="ROLE_ADMIN" />
  </flow>
</mule>

http:basic-security-filter​ は、基本認証を使用してユーザーを認証しようとします。認証に成功すると、Mule はユーザー名を取得し、Spring の ​authorization-filter​ で使用してそのユーザーを検索し、​ROLE_ADMIN​ 権限で要求を認証しようとします。