0

Web サイトの最初のページなど、すべてのユーザーがアクセスできる公開ページには、匿名ユーザーが含まれます。だから私は次のようにapplicationContext-security.xmlで設定します:

 <intercept-url pattern="/index" access="permitAll" />
 <intercept-url pattern="/css/**" access="permitAll" />
 <intercept-url pattern="/javascript/**" access="permitAll" /> 
 <intercept-url pattern="/**"
        access="hasAnyRole('ROLE_MANAGER','ROLE_ORGANIZATION')" />

サインインを使用する場合にユーザー情報を取得したい。以下のコードを使用します。

SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal()

その後、サインインしてもnullになります。

設定ミスだと思います。誰でも理由や場所を知っていますか? ありがとう

4

1 に答える 1

2

コードに問題はありません。通常、匿名ユーザーの場合、プリンシパルは単純な文字列「anonymousUser」になります。主な問題は、 AnonymousAuthenticationFilter.doFilter(...)が呼び出されなかったことだと思います。AnonymousAuthenticationFilterは、匿名認証を SecurityContextHolder に挿入する役割を果たします。HTTP リクエストが関連していることを確認してください。

SecurityContextHolder.getContext().getAuthentication().getPrincipal()

呼び出しは、Spring Security フィルター チェーンによってカバーされます。AnonymousAuthenticationFilter.doFilter()でブレークポイントを作成します。呼び出されていない場合は、web.xml を確認してください。フィルタ チェーンがすべての HTTP 呼び出しに適用されていることを確認してください。

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
于 2013-01-29T09:52:52.073 に答える