Frühlingssicherheit - SecurityContext.authentication null in taglib und jsp, aber ok in controller

Ich habe jetzt eine Weile mit diesem Problem zu kämpfen. Ich habe mehrere Beiträge dazu gefunden, aber keiner hat mein Problem gelöst. Es wird wahrscheinlich etwas damit zu tun haben, dass ein SecurityContext an einen bestimmten Thread gebunden ist, aber selbst dann weiß ich nicht, wie ich es lösen soll:

Erwägen Sie den folgenden Code, um den angemeldeten Benutzer abzurufen:

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

Wenn Sie diesen Code in einem Controller ausführen, wird der angemeldete Benutzer (korrekt) zurückgegeben. Wenn Sie diesen Code aus einer TagLib oder JSP ausführen, wird NPE ausgelöst (Authentifizierung = null). Auch der Frühlingsanhänger funktioniert nicht (vermutlich aus dem gleichen Grund).

Auszug aus 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>

Auszug aus der Sicherheitskonfigurationsdatei:

    <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>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage