Frühjahr-Methode Level Security schlägt fehl, auf den zweiten Anruf
Möchte ich mit der Methode level-security auf meinem GWT-Anwendung. Ich versuche, Spring Security 3.1, da fand ich ein funktionsfähiges Beispiel hier, nicht aber die form-login. Nach der Lektüre diese Antwort der erste Aufruf der Methode erfolgreich, erhält der SecurityContext, aber dann löscht es, bevor der nächste Anruf:
[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: 'org.springframework.security.core.context.SecurityContextImpl@6fe9f089: Authentication: org.example.MyAppName.server.auth.MyAppNameUserAuthentication@6fe9f089'
...
[org.springframework.security.access.intercept.aspectj.AspectJMethodSecurityInterceptor] - Authorization successful
...
[org.springframework.security.web.context.SecurityContextPersistenceFilter] - SecurityContextHolder now cleared, as request processing completed
...
[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.
[org.springframework.security.web.context.SecurityContextPersistenceFilter] - SecurityContextHolder now cleared, as request processing completed
...
[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - HttpSession returned null object for SPRING_SECURITY_CONTEXT
Dem zweiten Aufruf geschieht direkt nach der ersten und nur, nachdem der Benutzer anmeldet.
Ist es, weil ich folgte dem anderen Antwort, und entfernt <http pattern="/MyAppName/**" security="none" />
und Hinzugefügt <intercept-url pattern="/MyAppName/**" access="permitAll()" />
?
Meine Filter sind wie folgt:
<http pattern="/favicon.ico" security="none" />
<http access-decision-manager-ref="accessDecisionManager" use-expressions="true" auto-config="false" entry-point-ref="LoginUrlAuthenticationEntryPoint">
<form-login login-page="/Login.html" always-use-default-target="true" default-target-url="/Main.html?gwt.codesvr=127.0.0.1:9997" />
<intercept-url pattern="/Login.html" access="permitAll()" />
<intercept-url pattern="/Login2.html" access="permitAll()" />
<intercept-url pattern="/MyAppName/**" access="permitAll()" />
<intercept-url pattern="/**" access="isAuthenticated()" />
<logout delete-cookies="JSESSIONID" logout-success-url="/Login.html" />
<remember-me token-validity-seconds="86400" key="key" user-service-ref="userDetailsService" />
</http>
Folgenden das Beispiel, das ich erhalten, die ich verwenden AspectJ für die Globale Methode, die Sicherheit, aber würde es nicht verwenden, wenn ich Sie bekommen könnte, dass die Arbeit:
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" mode="aspectj" proxy-target-class="true" >
<expression-handler ref="expressionHandler"/>
</global-method-security>
Vielen Dank für die Zeit nehmen, dies zu Lesen
Bitte lassen Sie mich wissen, wenn mehr detail ist erforderlich.
- Ich glaube, Sie brauchen, um es zu trimmen Weg mehr nach unten zu etwas überschaubar, nicht viele werden sich die Mühe, Lesen und waten durch diesen text, um zu versuchen, um herauszufinden, was das problem sein könnte.
- Vielen Dank für Ihren Kommentar. Ich habe versucht, entfernt die logs von 2 der 3 erfolgreiche Anrufe, wie Sie waren wahrscheinlich überflüssig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses problem wurde gelöst.
Den letzten Teil der Lösung war das entfernen der Anforderung zu machen SecurityContextHolder global.
Wenn Sie mit dem gleichen problem finden könnte diese Beitrag hilfreich.