Java实现用户异地登陆踢人操作

使用框架:Shiro+SpringBoot

首先,我先说步骤:

1.登陆

2.查看该用户是否已经登陆 是:3   否:正常登陆

3.将已登陆用户踢出,自己登陆。

这只是说原理,具体实现现在说。


踢出已登陆用户,主要体现在对已登陆用户session的处理上,原理简单,就是将已登陆用户的session删除就好。

难点在于如何找到该用户的session。

这里,我使用了redis

首先,在登陆的时候获取用户的sessionId,也就是浏览器中的jessionId,因为我使用的是shiro框架,方法如下:

 Subject user = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken(phone, MD5Utils.getMD5Str(password).toCharArray());  //DigestUtils.md5Hex(password).toCharArray());//
        token.setRememberMe(true);
        try {
            user.login(token);
            user.getSession().setTimeout(-1000L); // 开发时设置永不过期,上线时需要调整 todo

        } catch (UnknownAccountException e) {
            logger.error("账号不存在:{}", e);
            return new ChariotResponseEntity<>(ChariotHttpStatus.USER_ACCOUNT_OR_PASSWORD_ERROR);
        } catch (DisabledAccountException e) {
            logger.error("账号未启用:{}", e);
            return new ChariotResponseEntity<>(ChariotHttpStatus.USER_NOT_ENABLED);
        } catch (IncorrectCredentialsException e) {
            logger.error("密码错误:{}", e);
            return new ChariotResponseEntity<>(ChariotHttpStatus.USER_ACCOUNT_OR_PASSWORD_ERROR);
        } catch (RuntimeException e) {
            logger.error("未知错误,请联系管理员:{}" + e.toString(), e);
            System.out.println(e.toString());
            return new ChariotResponseEntity<>(ChariotHttpStatus.USER_OTHER_REASON);
        }

        SessionsSecurityManager securityManager = (SessionsSecurityManager) SecurityUtils.getSecurityManager()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值