- 项目背景
项目接入sa-token之后,当token过期后,需弹出框“token会话过期”。首先放一下效果图
操作步骤
如果不想写corn定时任务,可以用这个来搞搞
- 修改Redis配置文件,使其支持 key 过期事件的监听
找到 redis.windows.conf或redis.conf 文件,搜索 “notify-keyspace-events”找到原本的notify-keyspace-events " ",修改为notify-keyspace-events Ex
,
原本的
修改之后的
- 添加依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 继承KeyExpirationEventMessageListener监听类
在sa-token官方文档中有一个全局监听类MySaTokenListener
全局监听类
在这个MySaTokenListener类里面再继承KeyExpirationEventMessageListener
关键代码如下
@Override
public void onMessage(Message message, byte[] bytes) {
//获取失效key名称
String expireKey = new String(message.getBody(), StandardCharsets.UTF_8);
//获取key原本的value 获取不到 是null
String expireKeyValue = redisTemplate.opsForValue().get("myKey");
//我是根据tokenvalues作为主键ID的
String[] split = expireKey.split(":");
String s = split[split.length - 1];
WebSocketServer.sendInfo(s, "token会话过期!!!");
logger.info("expireKey---"+expireKey);
logger.info("expireKeyValue---"+expireKeyValue);
}
里面的代码我是用token作为主键来搞的,可根据自己的需求来搞
- 创建一个配置类RedisListenerConfig
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;
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
- 项目运行之后,查看控制台,如果有这样的输出,表示配置成功
我话讲完!谁赞成?谁反对?