From 3f565f7c514b933d359195670f411dce88d7d979 Mon Sep 17 00:00:00 2001 From: lyd <1419499670@qq.com> Date: Sat, 8 Oct 2022 17:15:56 +0800 Subject: [PATCH] =?UTF-8?q?token=E8=BF=87=E6=9C=9F=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nladmin-system/pom.xml | 6 ++ .../rest/AuthorizationController.java | 6 +- .../security/satoken/RedisListenerConfig.java | 21 +++++++ .../satoken/TokenKeyExpirationListener.java | 51 ++++++++++++++++ .../main/resources/config/application-dev.yml | 10 +-- nladmin-ui/src/App.vue | 61 ++++++++++++++++++- 6 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 nladmin-system/src/main/java/org/nl/modules/security/satoken/RedisListenerConfig.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java diff --git a/nladmin-system/pom.xml b/nladmin-system/pom.xml index 3ef99f3fb..066992b1d 100644 --- a/nladmin-system/pom.xml +++ b/nladmin-system/pom.xml @@ -21,6 +21,12 @@ + + + org.springframework.boot + spring-boot-starter-data-redis + + com.hynnet diff --git a/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java b/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java index 9f24ffc2a..191ac680b 100644 --- a/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java +++ b/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java @@ -118,8 +118,10 @@ public class AuthorizationController { put("user", jsonObject); }}; + redisUtils.set("my-satoken", StpUtil.getTokenValue(), StpUtil.getTokenTimeout()); + // 保存在线信息 - onlineUserService.save(userDto, StpUtil.getTokenValue(), request); +// onlineUserService.save(userDto, StpUtil.getTokenValue(), request); return ResponseEntity.ok(authInfo); } @@ -157,7 +159,7 @@ public class AuthorizationController { @ApiOperation("退出登录") @DeleteMapping(value = "/logout") public ResponseEntity logout(HttpServletRequest request) { - onlineUserService.logout(StpUtil.getTokenValue()); +// onlineUserService.logout(StpUtil.getTokenValue()); StpUtil.logout(); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/nladmin-system/src/main/java/org/nl/modules/security/satoken/RedisListenerConfig.java b/nladmin-system/src/main/java/org/nl/modules/security/satoken/RedisListenerConfig.java new file mode 100644 index 000000000..b8245f869 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/security/satoken/RedisListenerConfig.java @@ -0,0 +1,21 @@ +package org.nl.modules.security.satoken; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; + +/** + * @author: lyd + * @description: + * @Date: 2022/10/8 + */ +@Configuration +public class RedisListenerConfig { + @Bean + RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + return container; + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java b/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java new file mode 100644 index 000000000..77377246e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java @@ -0,0 +1,51 @@ +package org.nl.modules.security.satoken; + + +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.mnt.websocket.MsgType; +import org.nl.modules.mnt.websocket.SocketMsg; +import org.nl.modules.mnt.websocket.WebSocketServer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * @author: lyd + * @description: + * @Date: 2022/10/8 + */ +@Slf4j +@Component +public class TokenKeyExpirationListener extends KeyExpirationEventMessageListener { + @Autowired + private StringRedisTemplate redisTemplate; + + public TokenKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { + super(listenerContainer); + } + + @Override + public void onMessage(Message message, byte[] pattern) { + // 监听过期的key + String expireKey = new String(message.getBody(), StandardCharsets.UTF_8); + //获取key原本的value 获取不到 是null + String expireKeyValue = redisTemplate.opsForValue().get("my-satoken"); + //我是根据tokenvalues作为主键ID的 + String[] split = expireKey.split(":"); + String s = split[split.length - 1]; + try { + WebSocketServer.sendInfo(new SocketMsg("token会话过期!", MsgType.INFO), "exp-token"); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + log.info("expireKey---"+expireKey); + log.info("expireKeyValue---"+expireKeyValue); + } + +} diff --git a/nladmin-system/src/main/resources/config/application-dev.yml b/nladmin-system/src/main/resources/config/application-dev.yml index a3bbd8cde..29b41e4db 100644 --- a/nladmin-system/src/main/resources/config/application-dev.yml +++ b/nladmin-system/src/main/resources/config/application-dev.yml @@ -6,12 +6,12 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy -# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:nladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true -# username: ${DB_USER:root} + url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:nladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true +# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} -# password: ${DB_PWD:P@ssw0rd} - password: ${DB_PWD:12356} +# username: ${DB_USER:root} + password: ${DB_PWD:P@ssw0rd} +# password: ${DB_PWD:12356} # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/nladmin-ui/src/App.vue b/nladmin-ui/src/App.vue index ec9032c1c..3f8e408bd 100644 --- a/nladmin-ui/src/App.vue +++ b/nladmin-ui/src/App.vue @@ -6,6 +6,65 @@