关于spring security安全退出问题

目前实现了security 会话并发控制 仅允许1个用户同时在线(同一账号)
但是后来发现问题 如果用户通过浏览器 主动清除session

那么再次登录就会出现登录不进去的情况
请问 有什么办法解决吗?图片说明

http://blog.csdn.net/u014756827/article/details/51305040

绑定用户登录的IP
出现这个问题的原因:手动消除cookie后与服务端就断开连接了,但是服务端的session还没有失效,这时候使用用户名密码登录时可以从session中
获取到该用户,所以提示用户已登录。

解决方案:将用户的登录IP保存在用户信息中,登录时如果session中已经该用户信息时,在检验用户的登录IP是否一样,如果一样登录成功,否则提示
用户已登录。

可能存在问题,同一个电脑上用另一个浏览器重复登录时也可以登录成功。
优化方案:同时绑定IP和浏览器信息或其它具有唯一性的信息。

spring security 有两种方法解决 仅允许1个用户同时在线(同一账号)

第一种是 : a 登陆后再进行登陆,服务器拒绝后面登陆的用户。
第二种是 : a 登陆后再进行登陆,服务器会把已登录用户踢掉,让最后登陆的用户登陆。

你这种用第二种比较好

第二种方法配置:

    <session-management invalid-session-url="/sessionException?msg=SESSION.INVALID" session-fixation-protection="migrateSession" >
        <!-- 
            配置同一用户多次登录的情况, 需要重写UserDetailsServiceImpl实现类loadUserByUsername方法返回的User重写equals和hashCode, 
            还需要在 web.xml中配置 org.springframework.security.web.session.HttpSessionEventPublisher 监听器

            max-sessions=1  配置同一用户最多可以同时登录多少次,超出后根据 error-if-maximum-exceeded 来处理

            error-if-maximum-exceeded 值为true时,如果一个用户已经登录,然后又进行登录,则无法登陆,
                                          值为false时,如果一个用户已经登录,然后又进行登录,则将踢掉上一个用户。

            expired-url 表示被提出的用户跳转到那个页面
        -->
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="false" expired-url="/sessionException?msg=SESSION.MULTI"/>
    </session-management>