在学习Shiro使用缓存时,出现:
java.io.NotSerializableException:org.apache.shiro.util.SimpleByteSource异常,开启debug会提示:
ERROR [authentication.data] - Disk Write of test failed: 错误。
出现这种情况是因为:SimpleByteSource没有是实现Serializable接口
解决办法:自定义一个类继承SimpleByteSource实现Serializable接口
当然也可以实现ByteSource接口和Serializable接口,但是实现ByteSource接口需要实现其方法,不方便。
自定义一个MySimpleByteSource 类继承继承SimpleByteSource实现Serializable接口。
public class MySimpleByteSource extends SimpleByteSource implements Serializable {
private static final long serialVersionUID = 1L;
public MySimpleByteSource(byte[] bytes) {
super(bytes);
}
}
在自定义realm的认证方法中:
//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
//获得主体对象身份
String username = (String) token.getPrincipal();
//根据用户名查询用户信息
User user = userDao.queryUserByUsername(username);
if (user!=null) {
return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), new MySimpleByteSource(user.getSalt().getBytes()), getName());
}
return null;
}