From 6ca853516671882e8e54d9630a4299f12fbcf9aa Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期四, 13 一月 2022 11:14:33 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/satoken' into dev --- ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java | 121 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 121 insertions(+), 0 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..95837fe --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java @@ -0,0 +1,121 @@ +package com.ruoyi.framework.listener; + +import cn.dev33.satoken.config.SaTokenConfig; +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.core.service.UserService; +import com.ruoyi.common.enums.UserType; +import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.utils.RedisUtils; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * 鐢ㄦ埛琛屼负 渚﹀惉鍣ㄧ殑瀹炵幇 + */ +@Component +@Slf4j +public class UserActionListener implements SaTokenListener { + + @Autowired + private SaTokenConfig saTokenConfig; + + /** + * 姣忔鐧诲綍鏃惰Е鍙� + */ + @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 = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId()); + 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, saTokenConfig.getTimeout(), TimeUnit.SECONDS); + 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) { + } + + +} -- Gitblit v1.9.3