1

DMS (ドキュメント管理システム) を設計する必要があり、構築するプラットフォームのベース フレームワークとして Spring を使用することにしました。エンジン アプリとポータル アプリの 2 つのメイン アプリケーションで構成されるプラットフォームを設計しています。どちらも Spring MVC に基づく Web アプリケーションです。エンジンは基本的に残りのサービスのセットであり、ポータルはアプリケーションのメイン フロントエンドです。エンジン アプリは一連のサービスであるため、これらのサービスを他のユーザーに公開する予定です。

エンジンは、Alfresco や IBM FileNET P8 などの他の DMS に接続できる必要があります。

エンジンはもちろん保護する必要があり、Spring Security を使用して、各インストールでエンジンを保護する方法を柔軟に選択することにしました (つまり、Oauth、LDAP、カスタム DB を使用する saas など)。

つまり、これは私が達成しようとしているものです:

  • ポータル アプリには、カスタム ログイン モジュールを備えた Jaas プロバイダーがあります
  • エンジン アプリには、カスタム ログイン モジュールを備えた Jaas プロバイダーがあります (ポータルと同じ)。

どちらのアプリケーションもスタンドアロンで動作しますが、ポータル アプリにログインしてエンジンを呼び出すと、Controller メソッド内で RestTemplate を使用すると、jaas 資格情報が渡されず、エンジンのメソッドが json の結果ではなくログイン ページを返します。

ポータル アプリにログインすると、ログインが SSO のように他のアプリに渡されます。

jaas サブジェクトをあるアプリから別のアプリに渡すために、RestTemplate に何かが欠けていると思います。おそらく、リクエスト内の何らかのヘッダーです。

どちらのアプリにも同じスプリング セキュリティ構成があります。

<http auto-config="true" use-expressions="true" jaas-api-provision="true">
    <intercept-url pattern="/api/**" access="hasRole('TESTROLE')" />    
</http>

<authentication-manager>
    <authentication-provider ref="jaasAuthProvider" />
</authentication-manager>

<beans:bean id="jaasAuthProvider" class="org.springframework.security.authentication.jaas.DefaultJaasAuthenticationProvider">
    <beans:property name="configuration">
        <beans:bean class="org.springframework.security.authentication.jaas.memory.InMemoryConfiguration">               
            <beans:constructor-arg>
                <beans:map>
                    <beans:entry key="SPRINGSECURITY">
                        <beans:array>
                            <beans:bean class="javax.security.auth.login.AppConfigurationEntry">
                                <beans:constructor-arg value="it.besolutions.aegis.testloginmodule.Login" />
                                <beans:constructor-arg>
                                    <util:constant static-field="javax.security.auth.login.AppConfigurationEntry$LoginModuleControlFlag.REQUIRED" />
                                </beans:constructor-arg>
                                <beans:constructor-arg>
                                    <beans:map></beans:map>
                                </beans:constructor-arg>
                            </beans:bean>
                        </beans:array>
                    </beans:entry>
                </beans:map>
            </beans:constructor-arg>
        </beans:bean>
    </beans:property>
    <beans:property name="authorityGranters">
        <beans:list>
            <beans:bean class="it.besolutions.aegis.testloginmodule.RoleGranter" />
        </beans:list>
    </beans:property>
</beans:bean>

ポータル アプリ コントローラーでの RestTemplate 呼び出しは次のようになります。

RestTemplate restClient = new RestTemplate();
ResponseEntity<DocumentCollection> result = restClient.getForEntity("http://localhost:8084/TestAegisRest/api/v1/documents", DocumentCollection.class);

テストにはTomcatを使用しています。

前もって感謝します。

4

0 に答える 0