Invalider la session de printemps de sécurité

Mon application web utilise le printemps de sécurité pour authentifier l'utilisateur lors de la connexion. J'ai aussi le contrôle de concurrence pour éviter l'utilisateur de se connecter deux fois sur l'autre machine. Cela fonctionne bien mais mon problème est que:
Si l'utilisateur est de vous connecter sur une machine, puis fermez le navigateur. Et il rouvrir l'application web , essayez de vous connecter de nouveau, il obtient le résultat suivant msg 'nombre Maximal de sessions de 1 pour ce principal dépassé' . Je tiens à invalider la session du navigateur fermé. Comment puis-je faire cela?

Spring-security.xml

       <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://.   www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/.    XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/.  spring-security-3.1.xsd">
<security:global-method-security
secured-annotations="enabled" />
<security:http auto-config="false"
authentication-manager-ref="authenticationManager" use-expressions="true">
<!-- Override default login and logout pages -->
<security:form-login
authentication-failure-handler-ref="fail"
authentication-success-handler-ref="success" login-page="/car/login.xhtml"
default-target-url="/jsf/car/home.xhtml" />
<security:logout invalidate-session="true"
logout-url="/j_spring_security_logout" success-handler-ref="customLogoutHandler" delete-cookies="JSESSIONID"/>
<security:session-management>
<security:concurrency-control
max-sessions="1" error-if-maximum-exceeded="true" />
</security:session-management>
<security:intercept-url pattern="/jsf/**"
access="isAuthenticated()" />
<security:intercept-url pattern="/run**"
access="isAuthenticated()" />
<security:intercept-url pattern="/pages/login.xhtml"
access="permitAll" />
</security:http>
<bean id="success" class="com.car.LoginSuccess" />
<bean id="fail" class="com.car.LoginFailed">
<property name="defaultFailureUrl" value="/?login_error=true" />
</bean>
<bean id="passwordEncoder"
class="org.springframework.security.authentication.encoding.ShaPasswordEncoder" />
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider
user-service-ref="userDetailsService">
<security:password-encoder ref="passwordEncoder"
hash="sha" />
</security:authentication-provider>
</security:authentication-manager>

    public class FilterToGetTimeOut extends OncePerRequestFilter {
@Override
public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException {
try {
if(request.getRequestURI().equals("/") || request.getRequestURI().equals("/car/login.xhtml")){
if(request.getSession().getAttribute("login") != null && (Boolean)request.getSession().getAttribute("login") == true){
response.sendRedirect("/jsf/car/home.xhtml");     //After login page
}
} else if(request.getSession().getAttribute("login") == null && !request.getRequestURI().equals("/j_spring_security_logout")){
response.sendRedirect(request.getContextPath()+"/?timeout=true");   //If timeout is true send session timeout error message to JSP
}
filterChain.doFilter(request, response);
} catch (Exception e) {
//Log Exception
}
}
  • Pouvez-vous montrer spring-security.xml?
  • Voir édité le post. Le contrôle de concurrence fonctionne bien. Je ne pense pas que la fermeture du navigateur problème est lié au fichier xml.
  • <la sécurité:session de gestion des invalides-session-url="/"> <sécurité:la simultanéité de contrôle-max-séances="1" erreur-si-maximale dépassée="true" /> </sécurité:session-management>...l'essayer..ajouter des invalides-session-url
  • J'ai essayer il n Toujours le même ...
  • <la simultanéité de contrôle-max-séances="1" expiré-url="login?timeout=true" />...essayez cela, il doit travailler
  • Ce n'est pas le travail. Je veux pouvoir se reconnecter à nouveau si l'utilisateur accidentellement fermé le navigateur.
  • Que vous devriez écrire un filtre...cochez cette stackoverflow.com/questions/36708580/...
  • Savez-vous comment ajouter ce filtre en web.xml?
  • Oui bien sûr..vérifiez que le lien de
  • ok j'essaie de l'appliquer et maintenant Quand j'ouvre mon application web dans le navigateur, il me donne ceci: Cette page web a une boucle de redirection.
  • Peut-être vous manque dans si la condition..donc sa va boucle infinie...montrez-moi la condition que vous avez ajouté
  • voir post édité
  • Pour lesquels la demande est la redirection vers la boucle infinie? ....'/' ou autre?? et lorsque vous stockez de connexion attribut de session

InformationsquelleAutor Alina | 2016-06-14