session 存储的内容未实现序列化接口 在redis作为sessioni存储时bug
在进行sping boot集成时候,session的管理帆软是运用的内置的,由于本系统是通过redis来管理session的,redis会有序列化和反序列化的操作,所以保存在session中的信息必须要实现系列和接口,在我项目实施过程中,发现对单元格添加超链接的地方会有一次session信息的获取,但是这个类没有实现序列化接口,导致系统有误。
具体代码如下:需要序列化的类 NoCheckHyperLinkSessionAttribute CompareUserNameAndHyperlink
protected PrivilegeVote isHyperLinkNoCheck(HttpServletRequest paramHttpServletRequest, FSAuthentication paramFSAuthentication)
{
String str1 = NetworkHelper.getHTTPRequestParameter(paramHttpServletRequest, "reportlet");
if (str1 == null)
str1 = NetworkHelper.getHTTPRequestParameter(paramHttpServletRequest, "formlet");
HttpSession localHttpSession = paramHttpServletRequest.getSession(true);
//从session中获取超链接的验证信息 NoCheckHyperLinkSessionAttribute 类和其内部类CompareUserNameAndHyperlink 都未实现Serializable接口,忘在后续的版本中检查session存储所涉及到的对象是否都实现了序列化接口
NoCheckHyperLinkSessionAttribute localNoCheckHyperLinkSessionAttribute = (NoCheckHyperLinkSessionAttribute)localHttpSession.getAttribute("fr_nocheck_hyperlinkinfo");
if ((localNoCheckHyperLinkSessionAttribute != null) && (localNoCheckHyperLinkSessionAttribute.isOneOfTheHyperlinks(str1)))
{
String str2 = (String)localHttpSession.getAttribute("fr_username");
String str3 = NetworkHelper.getHTTPRequestParameter(paramHttpServletRequest, "op");
long l = localNoCheckHyperLinkSessionAttribute.checkAlive(str2, str3, str1);
if (l > 0L)
{
if (System.currentTimeMillis() - l <= getTimeout())
return PrivilegeVoteImpls.SUCCESS;
return PrivilegeVoteImpls.MP_AUTH_TIMEOUT;
}
}
if (paramFSAuthentication != null)
return PrivilegeVoteImpls.MP_ROLE_ERROR;
return PrivilegeVoteImpls.MP_AUTH_ERROR;
}