java 监听redis事件
第一步:利用RDM等redis连接工具查看相应事件,然后去网上搜索 一下,会有redis各种事件的说明,选择契合业务的事件;

第二步:创建监听处理类;
1 package com.lechuang.auth.advice;
2
3 import com.lechuang.common.core.entity.LeChuangAuthUser;
4 import com.lechuang.common.core.entity.system.SystemUser;
5 import com.lechuang.common.core.utils.LeChuangUtil;
6 import com.lechuang.common.redis.service.RedisDBService;
7 import com.lechuang.common.redis.service.RedisService;
8 import lombok.RequiredArgsConstructor;
9 import lombok.extern.slf4j.Slf4j;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.data.redis.connection.Message;
12 import org.springframework.data.redis.connection.MessageListener;
13 import org.springframework.scheduling.annotation.Async;
14 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
15 import org.springframework.security.core.userdetails.User;
16 import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
17 import org.springframework.security.oauth2.provider.OAuth2Authentication;
18 import org.springframework.security.oauth2.provider.token.TokenStore;
19 import org.springframework.stereotype.Service;
20 import org.springframework.util.ObjectUtils;
21
22 import javax.annotation.Resource;
23 import java.lang.reflect.Field;
24 import java.util.LinkedHashMap;
25
26 /**
27 * 功能描述:Redis监听
28 * 作者:唐泽齐
29 */
30 @Slf4j
31 @Service
32 @RequiredArgsConstructor
33 public class LiveRedisKeysExpireListener implements MessageListener {
34
35 @Autowired
36 private RedisDBService redisDBService;
37 @Resource
38 private TokenStore tokenStore;
39
40 @Override
41 public void onMessage(Message message, byte[] pattern) {
42 Object o = redisDBService.getAndSet(9, "renewUser:" + message.toString(), null);
43 if(!ObjectUtils.isEmpty(o)) {
44 log.info("处理用户缓存信息更新:"+message.toString());
45 renewToken(o,message.toString());
46 } else {
47 redisDBService.del(9,"renewUser:" + message.toString());
48 }
49 }
50
51 @Async
52 void renewToken(Object o,String tokenKey) {
53 try {
54 SystemUser user = (SystemUser) o;
55 OAuth2Authentication authentication = tokenStore.readAuthentication(tokenKey);
56 UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) authentication.getUserAuthentication();
57 LinkedHashMap details = (LinkedHashMap) token.getDetails();
58 LinkedHashMap principal = (LinkedHashMap) details.get("principal");
59
60 LeChuangAuthUser authUser = (LeChuangAuthUser) token.getPrincipal();
61
62 //更新username
63 Field username = User.class.getDeclaredField("username");
64 username.setAccessible(true);
65 username.set(authUser,user.getUsername());
66 //更新 avatar
67 authUser.setAvatar(user.getAvatar());
68 //将新凭证 写入 token
69 DefaultOAuth2AccessToken oauthtoken = new DefaultOAuth2AccessToken(tokenKey);
70 oauthtoken.setTokenType("Bearer");
71 tokenStore.storeAccessToken(oauthtoken, authentication);
72 redisDBService.del(9,"renewUser:"+tokenKey);
73 } catch (Exception e) {
74 e.printStackTrace();
75 }
76 }
77
78 }
第三步:将监听处理类加入项目环境配置中,伴随项目启动;
1 package com.lechuang.auth.advice;
2
3 import org.springframework.context.annotation.Bean;
4 import org.springframework.context.annotation.Configuration;
5 import org.springframework.data.redis.connection.RedisConnectionFactory;
6 import org.springframework.data.redis.listener.PatternTopic;
7 import org.springframework.data.redis.listener.RedisMessageListenerContainer;
8
9 import javax.annotation.Resource;
10
11 /**
12 * 功能描述:Redis监听配置
13 * 作者:唐泽齐
14 */
15 @Configuration
16 public class RedisListenerConfig {
17
18 @Resource
19 private LiveRedisKeysExpireListener liveRedisKeysExpireListener;
20
21 @Bean
22 RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
23 RedisMessageListenerContainer container = new RedisMessageListenerContainer();
24 container.setConnectionFactory(connectionFactory);
25 container.addMessageListener(liveRedisKeysExpireListener, new PatternTopic("__keyevent@9__:expire"));
26 return container;
27 }
28
29 }
java 监听redis事件的更多相关文章
- springboot使用Redis,监听Redis键过期的事件设置与使用代码
我使用的是Windows下的Redis服务,所以一下Redis设置都是在Windows平台进行. 1.修改Redis配置文件 1.1:Windows下的Redis存在两个配置文件 修改带有servic ...
- Java监听模式
说明 生活中,监听无处不在.比如说,手机播放音乐功能,也是一种监听:你不点击播放按钮,手机就不放歌,当你点击时,手机就播放音乐.即触发某种行为,便执行相应的动作. 组成 Java监听模式右三个部分组成 ...
- [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播
-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...
- JS 中的事件绑定、事件监听、事件委托
事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有 ...
- javascript事件监听与事件委托
事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...
- 在Javascript中监听flash事件(转)
在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.cal ...
- Fragment中监听onKey事件,没你想象的那么难。
项目中越来越多的用到Fragment,在用Fragment取代TabHost的时候遇到了一个问题,我们都知道,TabHost的Tab为Activity实例,有OnKey事件,但是Fragment中没有 ...
- js 事件监听 冒泡事件
js 事件监听 冒泡事件 的取消 [自己写框架时,才有可能用到] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitiona ...
- 原 JS监听回车事件
原 JS监听回车事件 发表于2年前(2014-06-04 10:16) 阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 ...
随机推荐
- Python_列表比较大小
比较原理 从第一个元素顺序开始比较,如果相等,则继续,返回第一个不相等元素得比较结果.如果所有元素比较均相等,则长的列表大,一样长则两列表相等. 示例 a = [5, 6, 3] b = [5, 4, ...
- centos7安装使用vagrant
https://blog.51cto.com/u_12173069/2312621 #download virtualbox https://www.virtualbox.org/wiki/Linux ...
- vue中computed的作用以及用法
在vue中computed是计算属性,主要作用是把数据存储到内存中,减少不必要的请求,还可以利用computed给子组件的data赋值. 参考地址:https://www.jianshu.com/p/ ...
- 第10组 Alpha冲刺 (5/6)(组长)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13996848.html ·作业博客:https://edu.cnblogs.co ...
- js页面触发chargeRequest事件和Nginx获取日志信息
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814836302966424072/ 承接上一篇文档<js页面触发pageView和event事件编写> ...
- SpringBoot学习笔记四之后台登录页面的实现
注:图片如果损坏,点击文章链接: https://www.toutiao.com/i6803542216150090252/ 继续之前完成的内容,首先创建一个常量类 常量类的内容 服务器端渲染 前后端 ...
- Kube-OVN 1.2.0发布,携手社区成员打造高性能容器网络
Kube-OVN 1.2.0 新版本如期而至,支持 Vlan 和 OVS-DPDK 两种类型的高性能网络接口.本次发布得益于社区的壮大,感谢Intel爱尔兰开发团队与锐捷网络开发团队持续积极参与Kub ...
- Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- MCU软件最佳实践——独立按键
1. 引子 在进行mcu驱动和应用开发时,经常会遇到独立按键驱动的开发,独立按键似乎是每一个嵌入式工程师的入门必修课.笔者翻阅了许多书籍(包括上大学时候用的书籍)同时查阅了网上许多网友的博客,无一例外 ...
- NPOI导出例子
public static string ExportAOrder(ExportData data) { var cellHeard = new Dictionary<string, strin ...