java - 如何修复 java.io.InvalidClassException : org. springframework.security.core.context.SecurityContextImpl

标签 java spring spring-boot spring-security

我最近升级了我的 spring boot 应用程序的 Spring,结果,底层 Spring Security Core 升级到了 5.4.5。

现在启动 Spring Boot 应用程序时,我看到以下问题:

org.eclipse.jetty.server.HttpChannel - handleException / java.io.InvalidClassException: 
org.springframework.security.core.context.SecurityContextImpl; local class incompatible: 
stream classdesc serialVersionUID = 530, local class serialVersionUID = 540

在这种情况下,我在 GitHub 上找到了这篇文章:https://github.com/spring-projects/spring-security/issues/9204https://github.com/spring-projects/spring-security/issues/3736 .

但是我不知道如何解决这个问题。有人可以在这里帮忙吗?谢谢。

最佳答案

https://github.com/spring-projects/spring-security/issues/9204你可以找到: “Spring Security 不打算在版本之间序列化”

这令人兴奋。所以所有用户都需要在版本升级时注销!?

你能做什么?对于当前的升级,您必须注销所有用户。但是您可以为下一次升级做准备:

您需要为 session 对象编写自己的序列化。这是一个项目,他们在其中添加了自己的 session 序列化用户 Jackson 和一些 redis 库。例如,即使您使用的是 mysql,此代码也无需更改即可工作:

https://raw.githubusercontent.com/klboke/apollo/091a757d0a3c2173d6c600cd6a9a1595bb73c10c/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/component/config/SpringSessionConfig.java

有一点需要注意。因此,如果您不在生产环境中,则添加此配置,当安全库升级时,您就可以了,但是如果您是在生产环境中,则第一次部署此配置时,所有用户都需要先注销,因为 session 序列化不会适合上一个!

关于java - 如何修复 java.io.InvalidClassException : org. springframework.security.core.context.SecurityContextImpl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66983628/

相关文章:

java - 有没有办法获取 DOM 中节点的索引?

java - 在java中返回RedisTemplate对象时初始化默认键值对

java - spring-boot-devtools 在从缓存获取时导致 ClassCastException。

Java JPA 过滤器

java - 类层次结构,每个特定子类的 Autowiring 服务

java - 安装 WAR 后,前 2 次调用特定方法时出现 IBM WAS 9 错误,然后在第三次调用和所有后续调用中运行良好

java - 在 JSP Servlet 中使用 div 作为提交按钮

java - 返回值不正确的递归方法

java - 如何判断一个字符串是否只包含0到9而没有其他字符

java - 如何注入(inject)一个可以在运行时改变的值?