Ich habe eine Anwendung, die SwitchUserFilter verwendet. Das Umschalten und Beenden funktioniert im Normalfall gut, aber wenn wir die Ausgangs-URL geben, wenn der Benutzer nicht tatsächlich gewechselt hat, wird der Benutzer abgemeldet (erwartet), aber wenn er versucht sich erneut anzumelden, versucht die Anwendung umzuleiten ihn auf die letzte Seite, auf die er versuchte zuzugreifen (dh die Switch-Benutzer-URL) .. wo wieder, der Benutzer gefunden wurde, nicht geschaltet haben, und so ein Fehler ausgelöst wird, der Benutzer abgemeldet ist, und so der Zyklus fortgesetzt wird .Spring Sicherheit: "Benutzer wechseln" -Funktionalität verursacht einen Deadlock, wenn wir vor einem Schalter beenden
Im Folgenden ist meine Feder-Konfigurationsdatei:
<?xml version="1.0" encoding="UTF-8"?>
<!-- - Sample namespace-based configuration - -->
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<global-method-security pre-post-annotations="enabled">
<!-- AspectJ pointcut expression that locates our "post" method and applies
security that way <protect-pointcut expression="execution(* bigbank.*Service.post*(..))"
access="ROLE_TELLER"/> -->
</global-method-security>
<http use-expressions="true">
<intercept-url pattern="/**" access="isAuthenticated()" />
<custom-filter after="FILTER_SECURITY_INTERCEPTOR" ref="switchUserProcessingFilter" />
<form-login />
<logout invalidate-session="true" logout-url="/do/logout" />
</http>
<!-- Usernames/Passwords are rod/koala dianne/emu scott/wombat peter/opal -->
<authentication-manager>
<authentication-provider>
<user-service id="userService">
<user name="rod" password="koala" authorities="supervisor, teller, user" />
<user name="dianne" password="emu" authorities="teller, user" />
<user name="scott" password="wombat" authorities="user" />
<user name="peter" password="opal" authorities="user" />
</user-service>
</authentication-provider>
</authentication-manager>
<beans:bean id="switchUserProcessingFilter"
class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter">
<beans:property name="userDetailsService" ref="userService">
</beans:property>
<beans:property name="switchUserUrl" value="/switchUser" />
<beans:property name="exitUserUrl" value="/exitUser" />
<beans:property name="targetUrl" value="/index.jsp" />
</beans:bean>
</beans:beans>
Irgendwelche Vorschläge, wie kann ich damit umgehen?
Ein praktischer Fall könnte sein, wenn ich den Benutzer gewechselt habe und die Sitzung abläuft. Ohne zu wissen, dass die Sitzung abgelaufen ist, versucht der Benutzer, auf die URL "Benutzer beenden" zu klicken, die ihn dann zur Anmeldeseite weiterleitet, und der obige Zyklus wird fortgesetzt.