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