如何处理同时登录?

时间:2018-08-07 17:09:42

标签: spring spring-mvc spring-security

在我的Web应用程序中,登录页面为http://localhost:8080/vsingh/login

我可以在下面做

  1. 打开tab1并打开登录页面
  2. 打开tab2并打开登录页面

在tab1中,使用USER1登录。用户被重定向到主页。现在打开tab2并使用USER2登录。现在,用户被重定向到USER1的主页。

在这种情况下如何自动注销USER1?任何指针都表示赞赏。

PS:我确实会自动重定向到主页,因为用户已经登录并点击了登录页面,但是在这种情况下,该选项卡在用户尝试登录之前已经打开

@RequestMapping("/login")
public String login() {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if (!(auth instanceof AnonymousAuthenticationToken) && auth != null) {
        return "redirect:userHome";
    }
    return "login";
}

Spring Security XML

<http auto-config='true' use-expressions="true">
    <intercept-url pattern="/*" access="permitAll" />
    <access-denied-handler error-page="/login"/>
    <form-login login-page="/login"
        authentication-failure-handler-ref="customAuthFailureHandler"
        username-parameter="username" password-parameter="password"  
        authentication-success-forward-url="/userHomeX" />
    <csrf />
    <logout logout-success-url="/logout" />
</http>

<authentication-manager>
    <authentication-provider>
        <password-encoder ref="encoder" />
        <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="SELECT USERNAME, RTRIM(PASSWORD) AS PASSWORD, CASE WHEN ENABLED=1 AND ADMIN_LOCK = 0 THEN 1 ELSE 0 END AS ENABLED FROM JWBDATABASE.JWBSCHEMA.USERS WHERE USERNAME=?"
            authorities-by-username-query="SELECT USERNAME,USER_ROLE AS ROLE FROM JWBDATABASE.JWBSCHEMA.USERS WHERE USERNAME=?" />
    </authentication-provider>
</authentication-manager>

<beans:bean id="encoder"
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
    <beans:constructor-arg name="strength" value="11" />
</beans:bean>

<beans:bean id="customAuthFailureHandler"
    class="com.vj.authenticationManager.CustomAuthFailureHandler">
</beans:bean>

为什么它不是重复的? 问题不是关于在不同选项卡中允许多次登录,而是以某种方式强制所有选项卡进行一次登录。如果有人使用其他用户名通过已经打开的登录页面登录,则旧的页面应被强制注销,或者使用某些消息在新登录时抛出错误

0 个答案:

没有答案