J'ai passé beaucoup de temps à résoudre ce problème, mais je n'arrivais toujours pas à le faire fonctionner. J'utilise Spring Security. L'application fonctionnera sur plusieurs serveurs. J'utilise l'option "se souvenir de moi" lors de la connexion pour enregistrer les connexions persistantes dans ma base de données.Comment Invalider les sessions des utilisateurs lors de la déconnexion?
Si un utilisateur est connecté au serveur 1, il dispose d'un identifiant de session dans le navigateur de cookies. J'ouvre un autre serveur et cet utilisateur fait l'authentification et le navigateur de biscuits ont cet id de session et l'identification de session de la connexion du serveur 1. Lorsque cet utilisateur se déconnecte d'un serveur ou d'un autre serveur, il doit être redirigé vers la page de connexion de tous les serveurs.
J'ai essayé d'enlever les cookies du navigateur sans succès. Comment puis-je faire ce travail? De l'aide? Exemple de scénario: Dans gmail, si vous avez 2 onglets ouverts dans votre compte et que vous vous déconnectez de l'un d'entre eux, un autre onglet se déconnecte automatiquement. Le serveur 1 ne connaît pas les informations du serveur 2 .. Je pense que mon problème est ici mais je ne sais pas comment je peux résoudre ce problème.
C'est ma config de sécurité:
<http auto-config="false" use-expressions="true" disable-url-rewriting="true">
<intercept-url pattern="/login.do" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<remember-me data-source-ref="dataSource" />
<form-login login-page="/login.do" />
<custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrencyFilter" />
<custom-filter position="LOGOUT_FILTER" ref="logoutFilter" />
<session-management session-authentication-strategy-ref="sas" />
</http>
<!-- <logout logout-url="/j_spring_security_logout" logout-success-url="/" invalidate-session="true" /> -->
<beans:bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
<beans:constructor-arg value="/login.do" />
<beans:constructor-arg>
<beans:list>
<beans:ref bean="rememberMeServices"/>
<beans:ref bean="logoutHandler"/>
</beans:list>
</beans:constructor-arg>
<!-- <beans:property name="filterProcessesUrl" value="/login.do" /> -->
</beans:bean>
<beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />
<beans:bean id="concurrencyFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter">
<beans:property name="sessionRegistry" ref="sessionRegistry" />
<beans:property name="expiredUrl" value="/login.do" />
</beans:bean>
<beans:bean id="sas" class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
<beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" />
<beans:property name="maximumSessions" value="1" />
</beans:bean>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="jdbcUserService" />
</authentication-manager>
SessionRegistry ne fonctionne que sur un serveur. – sourcedelica
En fait, toute cette réponse est une réponse à un seul serveur. – sourcedelica