Personnalisé Printemps De Sécurité De Déconnexion Du Filtre
J'ai besoin de l'authentification d'un utilisateur (tuer leur session) à l'intérieur de mon ressort de sécurité 3.0.5 web app, puis envoyer une redirection vers un autre site pour les informer de la fermeture de la session. Est-ce possible à l'intérieur de printemps et si oui, qu'est-ce que l'approche générale de l'exécution de ces tâches? Merci!
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
import com.dc.api.model.Users;
public class DCSimpleUrlLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler{
public void onLogoutSuccess(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
Authentication authentication)
throws java.io.IOException,
javax.servlet.ServletException{
Users user=null;
Object principal = authentication.getPrincipal();
if (principal instanceof Users) {
user = (Users) principal;
if(user.getType().equals(TEST)){
response.sendRedirect("LogoutServlet");
}
}
response.sendRedirect("login.html");
}
}
java.lang.IllegalStateException
org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:463)
javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper.sendRedirect(SaveContextOnUpdateOrErrorResponseWrapper.java:74)
com.dc.api.service.impl.DCSimpleUrlLogoutSuccessHandler.onLogoutSuccess(DCSimpleUrlLogoutSuccessHandler.java:24)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:100)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
OriginalL'auteur c12 | 2011-03-28
Vous devez vous connecter pour publier un commentaire.
Sous-classe SimpleUrlLogoutSuccessHandler et remplacer onLogoutSuccess() pour faire la redirection.
Configurer la déconnexion gestionnaire de succès comme:
cela signifie généralement une partie de la sortie a été envoyé avant la redirection.
IllegalStateException a été causé par l'appel de la redirection deux fois.
response.sendRedirect("https://secure05.pilot.principal.com/shared/members/corp/LogoutServlet");
etresponse.sendRedirect("/dreamcatcher/auth/login.html");
OriginalL'auteur sourcedelica
Effectivement la mention "bonne réponse" est sur le réglage personnalisé
logout success-handler
, mais pasLogoutFilter
, que la définition en question.Donc, si quelqu'un veut créer un personnalisé déconnexion du filtre, voici un extrait:
C'est un filtre par défaut de la classe avec un défaut prédéfinies gestionnaire (celui de la invalider la session).
Si vous avez vraiment besoin d'un custom déconnexion du filtre, alors vous devez modifier ce comportement standard (cette sous-classe ou écrire votre propre avec la même interface).
Aussi n'oubliez pas de l'inscrire:
Mise à JOUR:
Après la lecture de quelques printemps de code, j'ai trouvé, qu'il y a une déconnexion par défaut du gestionnaire d' -
RememberMeServices
, défini avec l'interfaceAbstractRememberMeServices implements LogoutHandler
. Donc, si vous utilisezRememberMeServices
et que vous voulez écrire un filtre personnalisé, y compris RememberMe de soutien, vous devez également ajouter une référence à votreRememberMeServices
dans la liste de la déconnexion des gestionnaires.OriginalL'auteur msangel