2016-11-02 13 views
1

達成したいのは、セキュリティで保護されていないページ(例:/ index)ですが、認証されると、ログインしたユーザーを表示する認証オブジェクト。セキュリティフィルターチェーンを通過していないとき要求が春のセキュリティーチェーンを通過しない場合のアクセス認証オブジェクト

は春のドキュメントによると、認証オブジェクトは使用できません。

あなたが要求時にSecurityContextがコンテンツの内容を利用したい場合は、それがなければなりませんセキュリティフィルタチェーンを通過しました。そうしないと、SecurityContextHolderにデータが設定されず、内容がnullになります。

しかし、ページのセキュリティを無効にするには、セキュリティフィルタが無効になっている:

フィルタ=」none」に似て
<http pattern="/index" security="none"/> 

が、これも完全にその要求のパスのセキュリティフィルターチェーンを無効にします - ので、要求がアプリケーションで処理されると、Springセキュリティ機能は利用できなくなります。

これは、すべての認証さユーザーに許可を与えるので、私はまた、<intercept-url pattern="/index" access="permitAll" />を使用することはできません。認証オブジェクトが見つからない場合、AbstractSecurityInterceptorAuthenticationCredentialsNotFoundExceptionを投げるので、

Spring Securityの初心者として、SecurityContextにアクセスできる非セキュアなページを作成するにはどうしたらいいですか?

答えて

1

あなたが作成されますAnonymousAuthenticationFilterを使用して、どのユーザーがログインしていないときSecurityContextHolder.getContext().setAuthentication()AnonymousAuthenticationTokenインスタンスを割り当てることができます(XML構成で春のセキュリティ3.2.9を使用)。このように、あなたがAuthenticationCredentialsNotFoundExceptionを取得することはありませんし、簡単なinstanceof操作を行うことができますユーザーがログインしているか匿名でログインしているかを確認します。

<bean id="anonymousAuthFilter" 
     class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter"> 
    <property name="key" value="anonymousUser"/> 
    <property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS"/> 
</bean> 

<http pattern="/**"> 
    <intercept-url pattern="/index" access="permitAll"/> 
    <custom-filter ref="anonymousAuthFilter" position="ANONYMOUS_FILTER" /> 
</http> 
関連する問題