解决问题:分布式的系统,获取在某台机器上登录的用户session信息
实现session的redis存储,超时设置,session续命,session清除
引入redismaven依赖
<!-- spring session -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
启动方法增加EnableRedisHttpSession注解
1、拦截器 确定捕捉用户的那些操作,续命session
2、登录时,写入session数据
3、登出时,清除session数据
public abstract class BaseAction {
//用户权限session key
private static final String USER_SESSION = "userinfo";
HttpServletRequest request = null;
HttpServletResponse response = null;
HttpSession session = null;
@ModelAttribute
public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
this.session = request.getSession();
}
/**
* 后台保存UserSession到用户的Session中,默认超时时间为1800s
* 续命用户session
*/
public void setUserSessionInfo(UserSession userSession) {
session.setAttribute(USER_SESSION, userSession);
}
/**
*获取用户的userSession数据
*/
public UserSession getUserSessionInfo(){
UserSession userSession = null;
if (session != null) {
userSession = (UserSession) session.getAttribute(USER_SESSION);
}
return userSession;
}
/**
* 清除用户的Session中的UserSession
*
*/
public void clearUserSession() {
session.setAttribute(USER_SESSION, null);
}
public HttpServletRequest getRequest() {
return request;
}
public HttpServletResponse getResponse() {
return response;
}
}