对象反序列化出现类型不匹配的情况(spring-boot-devtools)

目前在做springboot项目的shiro session redis共享功能。但是有一个对象我把它放到redis中之后再取出来就会出现类型不匹配的异常

AuthorizationUser user = (AuthorizationUser) cache.getSuper(key);

异常信息:

java.lang.ClassCastException: com.ch.evaluation.auth.shiro.entity.AuthorizationUser cannot be cast to com.ch.evaluation.auth.shiro.entity.AuthorizationUser

通过debug看到他们的类信息是一样的

难道只是看起来一样么?我来判断一下

结果是false ,

那么我们知道JVM判断两个类对象是否相同的依据:一是类全称;一个是类加载器

既然他俩的类全称一样,那么问题肯定就出在了类加载器上了

我们可以Debug看一下他俩的类加载器

果然不出所料,他俩的类加载器是不同的!

那么是什么原因导致他的类加载器不一样呢?

  大家都知道虚拟机的默认类加载机制是通过双亲委派实现的。springboot为了实现程序动态性(比如:代码热替换、模块热部署等,白话讲就是类文件修改后容器不重启),“破坏或牺牲” 了双亲委派模型。springboot通过强行干预-- “截获”了用户自定义类的加载(由jvm的加载器AppClassLoader变为springboot自定义的加载器RestartClassLoader,一旦发现类路径下有文件的修改,springboot中的spring-boot-devtools模块会立马丢弃原来的类文件及类加载器,重新生成新的类加载器来加载新的类文件,从而实现热部署。比较流行的OSGI也能实现热部署)。



既然源头因热部署而起,所以只要想办法关掉springboot的热部署即可。

<方案一>  通过卸掉springboot的热部署模块spring-boot-devtools来实现

在pom中注释掉springboot的spring-boot-devtools

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>

<方案二>如果不想卸掉spring-boot-devtools模块也可禁用部署功能

读者也可以在application.properties设置禁用属性,但它的作用域只发生在当前模块,如果你的项目牵扯到多个模块,最好通过上面的方式在整个运行系统的级别禁用,以免出现多个模块之间实现类文件调用时类加载器不一致的问题。

<方案三>既然是类加载器的问题也可使用Spring的ConfigurableObjectInputStream配合Thread.currentThread().getContextClassLoader() 来使用。

 


转载于:https://www.cnblogs.com/UncleWang001/p/10063172.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频多媒体协议相关资料汇总

未知问题&#xff1a; 编码&#xff0c;封装&#xff0c;协议的区别&#xff1a; 如何将TS源流重新封装并通过P2P协议传输在安卓终端和苹果终端播放封装 介绍完了视频编码后&#xff0c;再来介绍一些封装。沿用前面的比喻&#xff0c;封装可以理解为采用哪种货车去运输&…

谷歌地图VS苹果地图:大数据领域竞争

摘要&#xff1a;iOS 6推出之后&#xff0c;争议最大的是什么&#xff1f;苹果地图。苹果地图成为人们抨击iOS 6的首选&#xff0c;而苹果放弃谷歌地图选择自力更生是迫不得已。苹果和谷歌之间的竞争领域可以用三个字来概括&#xff1a;大数据。谷歌拥有大数据&#xff0c;而苹…

微软正在考虑将Windows默认浏览器改为Chromium

据外媒报道&#xff0c;微软正在构建一个基于Chromium的浏览器&#xff0c;代号为Anaheim&#xff0c;目标是取代Windows中的Edge。 Microsoft Edge是微软于2015年推出的浏览器&#xff0c;该浏览器取代了IE成为Windows 10的默认浏览器。尽管如此&#xff0c;Microsoft Edge并没…

三次握手的第三个ACK包丢了,会发生什么?

转载自三次握手的第三个ACK包丢了&#xff0c;TCP的处理方式 三次握手的第三个ACK包丢了&#xff0c;客户端认为连接建立&#xff0c;写数据时&#xff0c;会触发RST。 当Client端收到Server的SYNACK应答后&#xff0c;其状态变为ESTABLISHED&#xff0c;并发送ACK包给Server&a…

一分钟了解四层/七层反向代理

转自公众号&#xff1a;架构师之路今天花几分钟简单和大家解释一下。场景&#xff1a;访问用户通过proxy请求被访问的真实服务器 路径&#xff1a;用户 -> proxy -> real-server什么是代理&#xff1f; 回答&#xff1a;[proxy]代表[访问用户]&#xff0c;此时proxy是代理…

tcp建立连接为什么需要三次握手

这是一个看似很“简单”的问题&#xff0c;但貌似并没有一个官方统一的答案。搜索了相关的资料&#xff0c;列举出一些答案。 以下部分转载自&#xff1a;tcp建立连接为什么需要三次握手 在《计算机网络》一书中其中有提到&#xff0c;三次握手的目的是“为了防止已经失效的连…

Tcp三次握手和四次挥手状态图

三次握手 四次挥手 正常情况下 同时挥手 SYN攻击&#xff1a; 在三次握手过程中&#xff0c;Server发送SYN-ACK之后&#xff0c;收到Client的ACK之前的TCP连接称为半连接&#xff08;half-open connect&#xff09;&#xff0c;此时Server处于SYN_RCVD状态&#xff0c;当…

财务自由之路——为什么选择淘宝(下)

接上文~一、淘宝之前的大佬们是怎么试错的?我们看看在淘宝之前的大佬们是怎么试错迭代产品的。都知道飞机是莱特兄弟发明的&#xff0c;但很少有人知道为什么是他们。在内燃机发明后的很长一段时间内全球各地发明家都在投入研究飞机&#xff0c;莱特兄弟相对于其他竞争者&…

一只视频程序猿的移动直播SDK初体验

本文转自一只视频程序猿的移动直播SDK初体验&#xff0c;此处仅做排版改动。 今早老板召开站会&#xff0c;“移动直播这么火&#xff0c;市面上有一百多个APP&#xff0c;小斌&#xff0c;你下周交个原型APP瞅瞅!” 小弟心中一万匹草泥马奔过&#xff0c;这玩意儿哪儿是几天就…

Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一&#xff1a;前言 最近手上压了一块米联客的Miz7035&#xff0c;一块xilinx zynq-7000系列的开发板&#xff0c;想着正好学习一下linux在ARM9上的移植&#xff0c;网上基本都是ZC702、zed的教程&#xff0c;这对于买了非标…

程序员的创业困境 谁来帮助出出主意?

【编者按】有人说&#xff0c;程序员是吃青春饭的&#xff0c;到一定年龄就得考虑转行&#xff0c;也有人选择自己创业。而当创业使你偏离了之前持续学习专业知识的轨道时&#xff0c;你会选择在创业路上继续坚持还是回归自己的老本行&#xff1f;编程编了十几年的Dan McComas半…

关于创业:希望有人在N年前就告诉我的一些事儿

【编者按】原文作者为前微软员工、创业家Amir Khella&#xff0c;他离开微软后开始自主创业&#xff0c;并成功创办了多家公司。他经常在博客中分享自己的创业故事和经验。以下是其中一篇博文&#xff0c;他认为创业者想要成功&#xff0c;首先需要找到自己的方向&#xff0c;再…

Rust核心团队前成员Brian Anderson加入PingCAP

昨天&#xff0c;国内新型分布式数据库公司PingCAP联合创始人兼CEO刘奇在朋友圈宣布&#xff0c;Rust核心团队前成员Brian Anderson将加入公司。PingCAP联合创始人兼CTO黄东旭进一步向InfoQ记者证实了此消息&#xff0c;并透露Brian将从事TiKV相关的工作&#xff0c;从存储引擎…

观察者模式-Observer Pattern

1.主要优点 观察者模式的主要优点如下&#xff1a; (1) 观察者模式可以实现表示层和数据逻辑层的分离&#xff0c;定义了稳定的消息更新传递机制&#xff0c;并抽象了更新接口&#xff0c;使得可以有各种各样不同的表示层充当具体观察者角色。 (2) 观察者模式在观察目标和观察者…

赌还是不赌 你应该辞职去创业吗?

【编者按】本文的作者是Amir Khella&#xff0c;他是一位著名的用户体验设计师&#xff0c;也是创业顾问和企业家。在过去的三年里&#xff0c;他成功的打造了十几家公司&#xff0c;其中不少还被大企所收购&#xff0c;比如说Google收购了他的DocVerse&#xff0c;LimeLight N…

Python 深浅copy 和文件操作

深浅copy 1&#xff0c;先看赋值运算。 l1 [1,2,3,[barry,alex]] l2 l1l1[0] 111 print(l1) # [111, 2, 3, [barry, alex]] print(l2) # [111, 2, 3, [barry, alex]]l1[3][0] wusir print(l1) # [111, 2, 3, [wusir, alex]] print(l2) # [111, 2, 3, [wusir, alex]] 对…

C# 实现生成带二维码的专属微信公众号推广海报

原文:C# 实现生成带二维码的专属微信公众号推广海报很多微信公众号中需要生成推广海报的功能&#xff0c;粉丝获得专属海报后可以分享到朋友圈或发给朋友&#xff0c;为公众号代言邀请好友即可获取奖励的。海报自带渠道二维码&#xff0c;粉丝长按二维码即可关注微信公众号&…

最新研究显示人类智力逐渐下降且变得更愚蠢

请大家去测试智力&#xff0c;看看是否正常水平&#xff1f;真的&#xff0c;智力在下降&#xff0c;在网络、电子设备和化肥、农药&#xff0c;转基因等因素下&#xff0c;人越来越差了。 保存到相册研究人员称现代人类将逐渐智力下降&#xff0c;这是因为我们不再需要智力来维…

缺陷的背后---LIMIT M,N 分页查找

一、问题发现篇 最近组内做了一次典型缺陷分享时&#xff0c;翻阅2018年的缺陷&#xff0c;找到了一个让我觉得“有料”的bug&#xff08;别的同事测试发现的&#xff09;&#xff0c;先大致简单的描述下这个问题&#xff1a; 需要实现的功能&#xff1a;从一个DB库同步某一段时…

angularjs 结构的两种写法(2)

app.js里面 route.js 本项目中的路由写法,路由的意思是&#xff1a;对应的跳转页面路径&#xff0c;比如此处当路由是member.user-statisttic时&#xff0c;是会跳转到url&#xff1a;http://.../user-statisttic.html页面&#xff0c;然后此页面对应的ctrl会解析也页面的参数。…