Shiro系列-常见问题处理

错误一

错误描述:

ERROR [authentication_cache.data] net.sf.ehcache.store.disk.DiskStorageFactory - Disk Write of weyoung failed:
java.io.NotSerializableException: org.apache.shiro.util.SimpleByteSource

错误原因:

  • 因为ehcache开启了缓存存储到物理影片上,所以需要序列化对象;
  • SimpleByteSource没有默认构造方法,导致反序列化的时候失败。
1
2
3
4
5
6
7
8
<cache name="authentication_cache"
maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="true"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU"/>

解决办法:

新建类:

ByteSourceUtils.java

1
2
3
4
5
6
7
8
9
public class ByteSourceUtils {
public static ByteSource bytes(byte[] bytes) {
return new MySimpleByteSource(bytes);
}

public static ByteSource bytes(String arg0) {
return new MySimpleByteSource(arg0.getBytes());
}
}

新建类:

MySimpleByteSource.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* @Author Mr.wang
* @Description shiro 使用缓存时出现:java.io.NotSerializableException: org.apache.shiro.util.SimpleByteSource
* 序列化后,无法反序列化的问题
* @Date 2020/1/10
*/
public class MySimpleByteSource extends SimpleByteSource implements Serializable {

private static final long serialVersionUID = 2719919888511993867L;

public MySimpleByteSource(byte[] bytes) {
super(bytes);
}
}