我的程序中有以下代码,在与Maven集成后,我正在运行SonarQube 5进行代码质量检查。
然而,声纳要求制作" UserProfile"可序列化或不将其存储在会话中。
为什么呢?
private void setUserProfileinSession(HttpServletRequest request,
Authentication authentication) {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(
authentication.getAuthorities());
GrantedAuthority authority = authorities.get(0);
UserProfile userProfile = new UserProfile();
userProfile.setUserName(authentication.getName());
userProfile.setUserRole(authority.getAuthority());
HttpSession session = request.getSession();
session.setAttribute(EnumGlobal.USERPROFILE.getName(), userProfile);
if (logger.isDebugEnabled()) {
logger.info("JK SSO Role Set in Session by AuthenticationSuccessHandler:"
+ userProfile.getUserRole());
}
面对第10行的问题 - (EnumGlobal.USERPROFILE.getName(),userProfile)
public class UserProfile extends BaseBO {
String userName;
String userRole;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserRole() {
return userRole;
}
public void setUserRole(String userRole) {
this.userRole = userRole;
}
答案 0 :(得分:2)
Web容器可能需要序列化会话内容。一个示例是在运行容器的多个实例时将会话转移到另一台物理计算机。
出于这个原因,放入会话的所有对象都应该是可序列化的(即实现接口java.io.Serializable
)。
错误消息提供了如何删除错误的提示:要么使对象可序列化,要么不将其存储在会话中。