私はこの問題を少しでも苦労しています。それについていくつかの記事を見つけましたが、誰も私の問題を解決しませんでした。これはおそらく、SecurityContextが、特定のスレッドにboudであるという事実とは何かを持っていますが、でも、私はそれを解決する方法がわからない:春のセキュリティ - SecurityContext.authenticationはtaglibとjspではnullですが、コントローラではokです
:は、ログインしたユーザーを取得するには、次のコードを考えてみましょう
SecurityContextHolder.getContext().getAuthentication().getPrincipal()
コントローラでこのコードを実行すると、ログインしたユーザーが(正しく)返されます。 このコードをtaglibまたはjspから実行すると、NPE(認証= null)がスローされます。 また、スプリングタグは機能しません(おそらく同じ理由で)。 web.xmlファイルから
エキス:
<filter>
<filter-name>AcegiFilter</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AcegiFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
エキス春のセキュリティ設定ファイルから:
<bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionIntegrationFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
</value>
</property>
</bean>
<bean id="filterSecurityInterceptor"
class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="alwaysReauthenticate" value="true" />
<property name="objectDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/myaccount.htm=ROLE_CUSTOMER
</value>
</property>
</bean>
この条件を生成するサンプルJSPを確認できますか?あなたのページヘッダーにSpring Security taglibをインポートしていますか? – Gandalf