From 1ae369855ba448bc2562ebbbe59a89e42b8c53b0 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期二, 19 十月 2021 17:23:14 +0800 Subject: [PATCH] update 优化 多账号体系用户行为监听逻辑 --- /dev/null | 106 -------------------------- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SaInterfaceImpl.java | 1 ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java | 109 +++++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 107 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java new file mode 100644 index 0000000..f407774 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java @@ -0,0 +1,109 @@ +package com.ruoyi.framework.listener; + +import cn.dev33.satoken.listener.SaTokenListener; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.dto.UserOnlineDTO; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.enums.UserType; +import com.ruoyi.common.utils.*; +import com.ruoyi.common.utils.ip.AddressUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 鐢ㄦ埛琛屼负 渚﹀惉鍣ㄧ殑瀹炵幇 + */ +@Component +@Slf4j +public class UserActionListener implements SaTokenListener { + + /** + * 姣忔鐧诲綍鏃惰Е鍙� + */ + @Override + public void doLogin(String loginType, Object loginId, SaLoginModel loginModel) { + UserType userType = LoginUtils.getUserType(loginId); + if (userType == UserType.SYS_USER) { + UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = ServletUtils.getClientIP(); + SysUser user = SecurityUtils.getUser(); + String tokenValue = StpUtil.getTokenValue(); + UserOnlineDTO userOnlineDTO = new UserOnlineDTO() + .setIpaddr(ip) + .setLoginLocation(AddressUtils.getRealAddressByIP(ip)) + .setBrowser(userAgent.getBrowser().getName()) + .setOs(userAgent.getOs().getName()) + .setLoginTime(System.currentTimeMillis()) + .setTokenId(tokenValue) + .setUserName(user.getUserName()); + if (StringUtils.isNotNull(user.getDept())) { + userOnlineDTO.setDeptName(user.getDept().getDeptName()); + } + RedisUtils.setCacheObject(Constants.ONLINE_TOKEN_KEY + tokenValue, userOnlineDTO); + log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue); + } else if (userType == UserType.APP_USER) { + // app绔� 鑷鏍规嵁涓氬姟缂栧啓 + } + } + + /** + * 姣忔娉ㄩ攢鏃惰Е鍙� + */ + @Override + public void doLogout(String loginType, Object loginId, String tokenValue) { + RedisUtils.deleteObject(Constants.ONLINE_TOKEN_KEY + tokenValue); + log.info("user doLogout, useId:{}, token:{}", loginId, tokenValue); + } + + /** + * 姣忔琚涪涓嬬嚎鏃惰Е鍙� + */ + @Override + public void doKickout(String loginType, Object loginId, String tokenValue) { + RedisUtils.deleteObject(Constants.ONLINE_TOKEN_KEY + tokenValue); + log.info("user doLogoutByLoginId, useId:{}, token:{}", loginId, tokenValue); + } + + /** + * 姣忔琚《涓嬬嚎鏃惰Е鍙� + */ + @Override + public void doReplaced(String loginType, Object loginId, String tokenValue) { + RedisUtils.deleteObject(Constants.ONLINE_TOKEN_KEY + tokenValue); + log.info("user doReplaced, useId:{}, token:{}", loginId, tokenValue); + } + + /** + * 姣忔琚皝绂佹椂瑙﹀彂 + */ + @Override + public void doDisable(String loginType, Object loginId, long disableTime) { + } + + /** + * 姣忔琚В灏佹椂瑙﹀彂 + */ + @Override + public void doUntieDisable(String loginType, Object loginId) { + } + + /** + * 姣忔鍒涘缓Session鏃惰Е鍙� + */ + @Override + public void doCreateSession(String id) { + } + + /** + * 姣忔娉ㄩ攢Session鏃惰Е鍙� + */ + @Override + public void doLogoutSession(String id) { + } + + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/satoken/MySaTokenListener.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/satoken/MySaTokenListener.java deleted file mode 100644 index cdb17bd..0000000 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/satoken/MySaTokenListener.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.ruoyi.framework.satoken; - -import cn.dev33.satoken.listener.SaTokenListener; -import cn.dev33.satoken.stp.SaLoginModel; -import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.http.useragent.UserAgent; -import cn.hutool.http.useragent.UserAgentUtil; -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.core.domain.dto.UserOnlineDTO; -import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.utils.RedisUtils; -import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.common.utils.ServletUtils; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.ip.AddressUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * 鑷畾涔変睛鍚櫒鐨勫疄鐜� - */ -@Component -@Slf4j -public class MySaTokenListener implements SaTokenListener { - - /** - * 姣忔鐧诲綍鏃惰Е鍙� - */ - @Override - public void doLogin(String loginType, Object loginId, SaLoginModel loginModel) { - UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent")); - String ip = ServletUtils.getClientIP(); - SysUser user = SecurityUtils.getUser(); - String tokenValue = StpUtil.getTokenValue(); - UserOnlineDTO userOnlineDTO = new UserOnlineDTO() - .setIpaddr(ip) - .setLoginLocation(AddressUtils.getRealAddressByIP(ip)) - .setBrowser(userAgent.getBrowser().getName()) - .setOs(userAgent.getOs().getName()) - .setLoginTime(System.currentTimeMillis()) - .setTokenId(tokenValue) - .setUserName(user.getUserName()); - if (StringUtils.isNotNull(user.getDept())) { - userOnlineDTO.setDeptName(user.getDept().getDeptName()); - } - RedisUtils.setCacheObject(Constants.ONLINE_TOKEN_KEY + tokenValue, userOnlineDTO); - log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue); - } - - /** - * 姣忔娉ㄩ攢鏃惰Е鍙� - */ - @Override - public void doLogout(String loginType, Object loginId, String tokenValue) { - RedisUtils.deleteObject(Constants.ONLINE_TOKEN_KEY + tokenValue); - log.info("user doLogout, useId:{}, token:{}", loginId, tokenValue); - } - - /** - * 姣忔琚涪涓嬬嚎鏃惰Е鍙� - */ - @Override - public void doKickout(String loginType, Object loginId, String tokenValue) { - RedisUtils.deleteObject(Constants.ONLINE_TOKEN_KEY + tokenValue); - log.info("user doLogoutByLoginId, useId:{}, token:{}", loginId, tokenValue); - } - - /** - * 姣忔琚《涓嬬嚎鏃惰Е鍙� - */ - @Override - public void doReplaced(String loginType, Object loginId, String tokenValue) { - RedisUtils.deleteObject(Constants.ONLINE_TOKEN_KEY + tokenValue); - log.info("user doReplaced, useId:{}, token:{}", loginId, tokenValue); - } - - /** - * 姣忔琚皝绂佹椂瑙﹀彂 - */ - @Override - public void doDisable(String loginType, Object loginId, long disableTime) { - } - - /** - * 姣忔琚В灏佹椂瑙﹀彂 - */ - @Override - public void doUntieDisable(String loginType, Object loginId) { - } - - /** - * 姣忔鍒涘缓Session鏃惰Е鍙� - */ - @Override - public void doCreateSession(String id) { - } - - /** - * 姣忔娉ㄩ攢Session鏃惰Е鍙� - */ - @Override - public void doLogoutSession(String id) { - } - - -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SaInterfaceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SaInterfaceImpl.java index 11a1974..5dc66f2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SaInterfaceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SaInterfaceImpl.java @@ -28,7 +28,6 @@ Long userId = LoginUtils.getUserId(); SysUser user = iSysUserService.getById(userId); Set<String> menuPermission = sysPermissionService.getMenuPermission(user); - //閲囩敤鐨勬槸鐢ㄦ埛閲岃嚜甯︾殑鏉冮檺锛屽疄鐜颁竴娆℃�ц闂畆eids,杩涜鍒ゆ柇鏄惁鍙互璁块棶 return new ArrayList<>(menuPermission); } else if (userType == UserType.APP_USER) { // app绔潈闄愯繑鍥� 鑷鏍规嵁涓氬姟缂栧啓 -- Gitblit v1.9.3