Spring security benutzerdefinierte filter mehrmals aufgerufen
Ich eine eigene logout-filter genannt, sechs mal. Zweimal so bald ich versuche, auf die Anwendung zuzugreifen, zweimal, wenn ich geben Sie Benutzername/Passwort ein und klicken Sie auf 'Login' und dann erneut zweimal, wenn ich auf 'logout'.
Was mache ich falsch?
Konfiguration:
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN_FUNCTIONS')" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<form-login login-page="/login"
authentication-success-handler-ref="customAuthenticationSuccessHandlerBean"
authentication-failure-handler-ref="customAuthenticationFailureHandlerBean" />
<logout invalidate-session="true" success-handler-ref="logoutHandlerBean" />
<session-management session-fixation-protection="migrateSession">
<concurrency-control max-sessions="1"
expired-url="/login_sessionexpired" />
</session-management>
<custom-filter before="LOGOUT_FILTER" ref="customLogoutFilter" />
</http>
<beans:bean id="customLogoutFilter" class="com.hurontg.libms.security.CustomLogoutFilter" />
Filter:
public class CustomLogoutFilter extends OncePerRequestFilter {
/**
*
*/
private XLogger logger = XLoggerFactory
.getXLogger(CustomLogoutFilter.class.getName());
@Override
protected void doFilterInternal(HttpServletRequest req,
HttpServletResponse res, FilterChain chain)
throws ServletException, IOException {
logger.error("========================================================================================");
logger.error("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Custom Logout Filter $$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
logger.error("========================================================================================");
chain.doFilter(req, res);
}
}
Spring version: 4.1.1
Spring security: 3.2.5
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es wahrscheinlich, aufgerufen wird, für die anderen URLs, die angefordert werden. Zum Beispiel, wenn Sie irgendwelche css, javascript, Bilder, die geladen werden auf der Seite werden aufgerufen, für jeden von denen. Versuchen Sie, ein logging-Anweisung, die zeigt die aktuelle Anforderung von Informationen, um herauszufinden, ob das der Fall ist. Zum Beispiel,
Wenn du mit Spring Boot, alle GenericFilterBean (OncePerRequestFilter eines gibt), wird der Kontext automatisch in die Filterkette. Bedeutung der Konfiguration Sie haben die oben genannten die gleichen filter zweimal.
Die einfachste Lösung für dieses ist die Definition einer FilterRegistrationBean im Rahmen, und es deaktiviert haben:
Nur teilen mein Fall 🙁
War ich nicht die Einstellung
authentication.setAuthenticated(true)
im AuthenticationProvider.Daher
AbstractPreAuthenticatedProcessingFilter
genanntauthenticate
einmal, dannAbstractSecurityInterceptor
war auch aufrufenauthenticateIfNeeded
.