これは私のシナリオです:
- Web アプリは、多くのアプリケーションに対して一種の SSO を実行します
- ログインしているユーザーがリンクをクリックすると、アプリはユーザー情報 (名前、パスワード [役に立たない]、役割) を含む投稿を適切なアプリケーションに送信します。
- これらのアプリケーションの 1 つに SpringSecurity を実装して、その力 (セッション内の権限、そのクラスによって提供されるメソッドなど) を利用しています。
したがって、リクエストからユーザー情報を取得し、カスタムDetailsUserServiceを介してデータベースから取得し、ユーザーに関する詳細情報 (電子メールなど) を取得し、認証を実行できるカスタムフィルターを開発する必要があります。リクエストから取得したロールに従って、そのユーザー。
事前認証フィルターを検討していましたが、それが正しい選択であるかどうかはわかりません。これらのオブジェクトは、プリンシパルがすでにセッションにあるときに使用されることが期待されているようで、以前の認証メカニズムによって配置されています (そうですか?)。
正しいフィルターを特定したら、次のように実行する必要があると思います。
GrantedAuthority[] ga= new GrantedAuthority[1];
ga[0] = new GrantedAuthorityImpl(myUser.getRole());
SecurityContext sc = SecurityContextHolder.getContext();
Authentication a = new UsernamePasswordAuthenticationToken(userName, userPwd, ga);
a = authenticationManager.authenticate(a);
sc.setAuthentication(a);
私の問題を解決するための適切な方向ですか?足りないものを見つけるのに役立つ提案はありますか?
皆さん、ありがとうございました、
ルカ
添加:
こんにちはXearxess!もう一度お邪魔して申し訳ありませんが、SpringSecurity 2.0.4 に準拠したコードの翻訳は思ったよりも難しいようです:S 問題は XML です... 別の構成を試しましたが、常に名前空間の問題に遭遇し、属性がありませんなど...
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
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-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
<security:http>
<security:intercept-url pattern="/**" access="isAuthenticated()" />
<security:logout logout-url="/logout" logout-success-url="http://milan-ias-vs.usersad.everis.int/DMTest/" invalidate-session="true" />
<security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthenticatedProcessingFilter" />
</security:http>
<bean id="preAuthenticatedProcessingFilter" class="it.novartis.ram.authentication.PreAuthenticatedProcessingFilter">
<custom-filter position="PRE_AUTH_FILTER"/>
<property name="authenticationManager" ref="authenticationManager" />
</bean>
<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService">
<bean class="it.novartis.ram.authentication.PreAuthenticatedUserDetailsService" />
</property>
</bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="preauthAuthProvider" />
</security:authentication-manager>
</beans>
CUSTOM-FILTER 要素を参照する 2 つの行は 2 つの異なる試行であり、どちらもエラーとして署名されています。フィルタの位置をプロパティとして指定するにはどうすればよいですか?
また、認証マネージャー定義の認証プロバイダー参照はエラーとしてマークされます。これもプロパティのように指定する必要があると思いますよね?
最後の一押しをいただければ幸いです ;) ありがとうございます。
ルカ