首页登录,登录后跳到用户中心页。
登录时请求到后台的登录接口,保存用户信息到session
用户中心页请求到后台的接口,根据id向session取用户信息,结果调试发现得到的总是一个新的session,所以取不到值,一直认为是未登录。
以下是session操作工具类
public class HttpSessionUtil {
private static HttpServletRequest getRequest() {
return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
}
/**
* 从session获取用户信息
* @param UserEntity
* @return
*/
public static UserEntity getAccount(UserEntity userEntity) {
HttpSession session = getRequest().getSession();
if (userEntity == null || userEntity.getId() == null) {
return null;
}
return (UserEntity) session.getAttribute(userEntity.getId().toString());
}
/**
* 从session获取用户信息
* @param id
* @return
*/
public static UserEntity getAccount(Long userId) {
HttpSession session = getRequest().getSession();
if (userId == null) {
return null;
}
return (UserEntity) session.getAttribute(userId.toString());
}
/**
* 向session储存用户信息:
* id和username
* @param userEntity
*/
public static void setAccount(UserEntity userEntity) {
HttpSession session = getRequest().getSession();
if (userEntity != null && userEntity.getId() != null) {
UserEntity userToSession = new UserEntity();
userToSession.setId(userEntity.getId());
userToSession.setUsername(userEntity.getUsername());
session.setAttribute(userEntity.getId().toString(), userToSession);
//session过期时间设置,以秒为单位,即在没有活动30分钟后,session将失效
// session.setMaxInactiveInterval(30 * 60);
// 以上使用默认过期时间
}
}
/**
* 从session删除用户信息记录
*/
public static void removeAccount(UserEntity userEntity) {
if (userEntity != null && userEntity.getId() != null) {
HttpSession session = getRequest().getSession();
session.removeAttribute(userEntity.getId().toString());
}
}
}
以下是调试信息
登录时保存:
用户页获取: