对象反序列化出现类型不匹配的情况(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,一经查实,立即删除!

相关文章

最后一周总结

1&#xff09; 回归第一周目标 对于第一周的目标&#xff0c;在提高代码量&#xff0c;多写多练方面达到了&#xff0c;之前结点编程时还不是很熟悉python&#xff0c;现在写的比较熟练了&#xff0c;同时学习了一门新的语言Julia&#xff0c;在学习的过程中也看了Julia和Flux的…

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

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

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

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

Shell 参数传递、 $* 与 $@ 区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 传递参数 脚本内获取参数的格式为&#xff1a; $n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c; 2 为执行脚本的第…

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

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

css文本属性

text-align文本水平对齐属性 取值 left(默认) right center text-indent 文本缩进属性 单位可以是px也可以是em(字符) text-decoration 文本装饰属性 取值 underline(下划线) overline(上划线) line-though(删除线) 转载于:https://www.cnblogs.com/c-aha/p/10298422.html

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

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

运营商与厂商发力 智能机进入700元以下时代

千元智能手机的成功&#xff0c;并没有让运营商以及手机厂商感到满足。继中国电信宣布重点打造600元智能手机后&#xff0c;近日&#xff0c;中国联通也表态将发力700元以下智能手机市场。而运营商的表态立刻引来了多家手机厂商的呼应&#xff0c;产品价格的继续下探&#xff0…

输入一个数,判断他是不是质数

思路:先给一个数字x,然后让这个数字x从2开始除,如果 x 从 2 除到 (x-1) 能被整除,那这就不是质数.如果不能被整除,那就是质数. 当然如果x小于2,那x必然不是质数,也不是合数. #输入一个数,判断他是不是质数 x int(input("请输入一个数字:")) #先输入一个数字 co…

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

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

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

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

SFTPUtils工具类及使用

配置maven <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version> </dependency> 工具类 package com.sftp;import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsE…

国内手机产业混乱:产业一窝蜂 企业捞快钱

对于当前国内手机行业的现状&#xff0c;本报记者采访的多位业内人士表示&#xff0c;目前国内手机行业仍是“红海”格局&#xff0c;多数企业并不了解手机产业规律&#xff0c;看到有钱赚就“一窝蜂”上项目。有行业人士认为&#xff0c;要走出目前行业的现状&#xff0c;企业…

查看私密文章方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我只是记录下&#xff0c;曾经写过一次文章&#xff0c;勾选了私密&#xff0c;再后来就找不到了。 下面这个链接可以查出那篇文章&…

SDUT-3364_欧拉回路

数据结构实验之图论八&#xff1a;欧拉回路 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在哥尼斯堡的一个公园里&#xff0c;有七座桥将普雷格尔河中两个岛及岛与河岸连接起来。 能否走过这样的七座桥&#xff0c;并且每桥只走一次&#xff1f;瑞士数学…

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

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

QEMU 3.0.0 新特性一览

QEMU 在 2018年8月15发布了版本3.0.0&#xff0c; 正式从 2.12 进入了3.0 时代。 而且到今年位为止&#xff0c;QEMU 已经有15个年头了&#xff0c;出乎意料的长阿&#xff0c;:) 其主要新特性如下&#xff1a; ARM&#xff1a; 在virt机器中支持SMMUv3 IOMMU 在v8M中支持VLLDM…

OpenCL、OpenGL 同时工作

视频处理如果能使用OpenCL、OpenGL、omap将大量提高运算速度&#xff0c;简单介绍OpenCL、OpenGL 同时工作。 OpenCL和OpenGL都能用于操作GPU&#xff0c;但是前者主要用于通用计算&#xff0c;而后者主要用于图像渲染。在某些情况下&#xff0c;我们希望能用OpenCL计得到算图像…

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

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

java参数后面跟三个点是什么意思

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 AVA中类型后面跟三个点是什么来的。 看代码中那个三点&#xff0c;这样做起到重载的作用&#xff0c;但这是什么意思&#xff1f; cla…