加载类的时候报序列化问题
1,没有实现序列化接口,加序列号
2,服务有实现或继承了序列化接口,子类又实现
2,子类用了toString()
添加了一个toString()实现,所以内部的jvm-auto-calculated
serialVersionUID与之前不同。
由于
关键类实现了Externalizable,所以实现也可能会改变一次:
3,jvm版本不同
672853 [http-bio-8080-exec-3] WARN 2017-12-05 15:30:07 org.apache.shiro.mgt.DefaultSecurityManager - Delegate RememberMeManager instance of type [org.apache.shiro.web.mgt.CookieRememberMeManager] threw an exception during getRememberedPrincipals().
org.apache.shiro.io.SerializationException: Unable to deserialze argument byte array.
at org.apache.shiro.io.DefaultSerializer.deserialize(DefaultSerializer.java:82)
at org.apache.shiro.mgt.AbstractRememberMeManager.deserialize(AbstractRememberMeManager.java:514)
at org.apache.shiro.mgt.AbstractRememberMeManager.convertBytesToPrincipals(AbstractRememberMeManager.java:431)
at org.apache.shiro.mgt.AbstractRememberMeManager.getRememberedPrincipals(AbstractRememberMeManager.java:396)
at org.apache.shiro.mgt.DefaultSecurityManager.getRememberedIdentity(DefaultSecurityManager.java:604)
at org.apache.shiro.mgt.DefaultSecurityManager.resolvePrincipals(DefaultSecurityManager.java:492)
at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:342)
at org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:846)
at org.apache.shiro.web.subject.WebSubject$Builder.buildWebSubject(WebSubject.java:148)
at org.apache.shiro.web.servlet.AbstractShiroFilter.createSubject(AbstractShiroFilter.java:292)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:359)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.common.CrossDomainFilter.doFilter(CrossDomainFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: Unable to load ObjectStreamClass [[Lcore.apps.rbac.vo.FlexGrantedAuthority;: static final long serialVersionUID = 7325751928510350430L;]:
at org.apache.shiro.io.ClassResolvingObjectInputStream.resolveClass(ClassResolvingObjectInputStream.java:55)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1930)
处理方式:例如去了toString()方法
package core.apps.rbac.vo; import core.apps.rbac.entity.SkillInfoEntity; import org.acegisecurity.GrantedAuthority; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class FlexGrantedAuthority implements GrantedAuthority { private static final long serialVersionUID = -2626208595738823534L; private String role; private List<SkillInfoEntity> skillUrls = new ArrayList(); public List<SkillInfoEntity> getSkillUrls() { return this.skillUrls; } public void setSkillUrls(List<SkillInfoEntity> skillUrls) { this.skillUrls = skillUrls; } public String getRole() { return this.role; } public void setRole(String role) { this.role = role; } public String getAuthority() { return this.role; } //public String toString() //{ // return this.role; //} }
参考:
http://grokbase.com/t/shiro/user/09b4h1afs0/serializationexception
相关推荐
要构造一个探测gadget,我们需要创建一个特殊的序列化数据流,它能够触发特定的类加载,同时避开serialVersionUID的检查。这通常涉及到对Java序列化格式的深入理解以及对 ysoserial 工具的熟悉,ysoserial 是一个...
"北大青鸟-影院售票系统PPT" 本资源是关于北大青鸟的影院售票系统的讲解文档,涵盖了该...该系统使用了多种设计模式和技术,例如简单工厂模式、多态、接口、序列化和反序列化等,提供了一个灵活、可扩展的解决方案。
- **`AbstractSecurityWebApplicationInitializer`**:此抽象类用于初始化Spring Security配置。 - **`super(SecurityConfig.class);`**:这里指定了主配置类`SecurityConfig`。 #### 四、登陆验证:从数据库获取...
在C#中,我们可以使用BinaryFormatter或XmlSerializer类来实现对象的序列化与反序列化。这对于保存游戏进度、应用程序配置或者在网络间传递对象信息都非常有用。例如,通过实现ISerializable接口或使用[Serializable...
例如,要获取demo包内的names.ser序列化文件,可以使用以下代码: URL url2 = ClassLoader.getSystemClassLoader().getResource("demo/names.ser"); 第二种常用的方法是使用当前类的getResource方法来加载资源文件...
Java提供了`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`类来进行对象的序列化和反序列化。 5. **异常处理** - UDP通信过程中可能会遇到各种异常,如网络中断、数据包丢失等。因此,程序必须包含...
在通信范例中,我们可能会看到如何使用`System.Xml.Serialization`或`System.Text.Json`进行数据序列化和反序列化。 在处理文件I/O时,C#提供了丰富的类库,如`System.IO.File`和`System.IO.StreamReader/...
Pickle是Python中用于序列化和反序列化对象的模块,它能将Python对象结构转化为字节流,然后在需要时恢复这些对象。这种格式常用于存储和加载数据集,特别是当数据需要在不同的程序之间共享或者长期保存时。 1. **...
7. **序列化和反序列化**: - 为了保存销售情况,系统利用了序列化技术将对象的状态转化为可以存储或传输的格式。反序列化则是将这些数据恢复为原来的对象状态,以便于后续读取和分析销售数据。 8. **类设计**: ...
- 销售情况的保存和读取需要用到序列化和反序列化技术。这样,系统可以将当前的销售状态(如已售出的票)转换为文件存储,下次启动时再从文件中恢复。 8. **动态加载座位**: - 系统需要动态地在界面上加载座位...
10. **IO流**: `InputStream` 和 `OutputStream` 是基础的I/O流类,它们的子类如`FileInputStream`和`FileOutputStream`用于文件操作,而`DataInputStream`和`DataOutputStream`则可以用于序列化和反序列化数据。...
Protocol Buffers是一种序列化协议,它允许数据以结构化的格式进行存储和传输,广泛应用于跨平台的数据交换和网络通信。 描述中提到的问题是,默认情况下,Protobuf为Windows平台提供的编译版本是静态链接库,这...
这个问题可能源于代码逻辑处理不当,或者在序列化和反序列化过程中对null值的处理不正确。修复这个问题后,现在这个包应该能够更稳定地处理包括null值在内的各种session数据,避免程序异常中断。 这个"redis-...
4. **输入/输出(I/O)**: 文件操作、流的概念、序列化和反序列化,例如FileReader、FileWriter、BufferedReader、BufferedWriter等类的使用。 5. **网络编程**: Socket编程用于实现客户端和服务器间的通信,如TCP...
4. **数据序列化与反序列化**:消息在客户端和服务端之间传输时,通常需要转换为二进制或JSON等格式。C#提供了BinaryFormatter、XmlSerializer和Newtonsoft.Json库等工具,用于数据的序列化和反序列化。 5. **用户...
15. **Socket 通信注意事项**:在使用 TCP 通信时,对象传输需序列化,文件传输需使用输入/输出流。UDP 通信则更简单,但需要处理数据包的排序和丢失问题。 以上内容涵盖了 Java 基础的多个关键知识点,对于深入...
需要注意的是,串行化可能引发的安全问题,如反序列化时的代码注入。 6. **线程的基本概念和状态**:线程是程序中的执行单元,可以并发执行。线程的状态包括新建、就绪、运行、阻塞和死亡。状态之间通过特定条件...
3. **数据保存与加载**:程序可能提供了保存和加载功能,这需要对序列化的支持。C++可以使用`fstream`类进行文件读写,将约瑟夫环的状态(如剩余人数、当前报数、链表或数组状态等)序列化为文件,以便在程序重新...
- Dubbox是Dubbo的升级版,增加了如RESTful API支持、更高效的序列化机制(Kryo和FST)、基于Jackson的JSON序列化、内嵌Tomcat支持等新特性。 3. **ArrayList与LinkedList的区别** - ArrayList基于动态数组,适合...