若依框架单点登录!!!
一、不分离版在application.yml设置maxSession为1即可。修改shiro的配置shiro: session: # 同一个用户最大会话数比如2的意思是同一个账号允许最多同时两个人登录默认-1不限制 maxSession: 1 # 踢出之前登录的/之后登录的用户默认踢出之前登录的用户 kickoutAfter: false二、分离版springbootvue1、application.yml新增一个配置soloLogin用于限制多终端同时登录。修改token的配置token: # 是否允许账户多终端同时登录true允许 false不允许 soloLogin: false2、Constants.java新增一个常量LOGIN_USERID_KEY公用/** * 登录用户编号 redis key */ public static final String LOGIN_USERID_KEY login_userid:;3、调整TokenService.java存储刷新缓存用户编号信息// 是否允许账户多终端同时登录true允许 false不允许 Value(${token.soloLogin}) private boolean soloLogin; /** * 删除用户身份信息 */ public void delLoginUser(String token, Long userId) { if (StringUtils.isNotEmpty(token)) { String userKey getTokenKey(token); redisCache.deleteObject(userKey); } if (!soloLogin StringUtils.isNotNull(userId)) { String userIdKey getUserIdKey(userId); redisCache.deleteObject(userIdKey); } } /** * 刷新令牌有效期 * * param loginUser 登录信息 */ public void refreshToken(LoginUser loginUser) { loginUser.setLoginTime(System.currentTimeMillis()); loginUser.setExpireTime(loginUser.getLoginTime() expireTime * MILLIS_MINUTE); // 根据uuid将loginUser缓存 String userKey getTokenKey(loginUser.getToken()); redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); if (!soloLogin) { // 缓存用户唯一标识防止同一帐号同时登录 String userIdKey getUserIdKey(loginUser.getUser().getUserId()); redisCache.setCacheObject(userIdKey, userKey, expireTime, TimeUnit.MINUTES); } } private String getUserIdKey(Long userId) { return Constants.LOGIN_USERID_KEY userId; }4、自定义退出处理类LogoutSuccessHandlerImpl.java清除缓存方法添加用户编号// 删除用户缓存记录 tokenService.delLoginUser(loginUser.getToken(), loginUser.getUser().getUserId());5、登录方法SysLoginService.java验证如果用户不允许多终端同时登录清除缓存信息// 是否允许账户多终端同时登录true允许 false不允许 Value(${token.soloLogin}) private boolean soloLogin; recordLoginInfo(loginUser.getUser()); if (!soloLogin) { // 如果用户不允许多终端同时登录清除缓存信息 String userIdKey Constants.LOGIN_USERID_KEY loginUser.getUser().getUserId(); String userKey redisCache.getCacheObject(userIdKey); if (StringUtils.isNotEmpty(userKey)) { redisCache.deleteObject(userIdKey); redisCache.deleteObject(userKey); } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2455181.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!