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を使用しています。
前もって感謝します。