今天记录一下学习的springSession以及遇到的坑
1.SpringSession依赖导入pom文件
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
以下三个博客对SpringSession说的比较清楚可以参考
博客1
博客2
博客3
另外
springboot配置filter(已有的类)
之前不是很懂,以为要自己配置filter 来把HttpSession包装,最起码spring是在xml里这么做的,于是又找了大量资料,终于懂了原来springboot里面用个注解就轻松搞定了(哭了),不过学习一下还是好的。
坑!!
最重要的坑来了,我加入springSession依赖之后项目就运行不了了,
原来是springSession和redis-cli包有冲突造成的,于是这里试了几次,把他俩给定的version去除,都下载最新版本,就给解决了。
Coding!
配置文件里:
# Session store type.
spring.session.store-type=redis
# Redis server host.
spring.redis.host=localhost
# Login password of the redis server.
#spring.redis.password=
# Redis server port.
spring.redis.port=6379
#springSessionTimeout
server.session.timeout=36000
这里就不说了,上面的博客都有介绍,我这里没有用到redis密码,于是把这一步骤给注解了
下面用springSession实现登录,登出,获取用户信息
@RestController
@RequestMapping("/user/springSession")
public class UserSpringSessionController {
@Resource
private UserServiceImpl userService;
@RequestMapping(value = "/login.do",method = RequestMethod.POST)
public ServerResponse login(@RequestParam String username, @RequestParam String password, HttpSession session , HttpServletResponse httpServletResponse){
ServerResponse response=userService.login(username,password);
if (response.isSuccess()){
session.setAttribute(Const.CURRENT_USER,response.getData());
//sessionId= 3D5D2DBC9DF714996B58FA5297920E36
// CookieUtil.writeLoginToken(httpServletResponse,session.getId());
// RedisPoolUtil.setEx(session.getId(), JsonUtil.object2String(response.getData()), Const.ReidsCacheExTime.REDIS_SESSION_EXTIME);
}
return response;
}
@RequestMapping(value = "/logout.do")
public ServerResponse logout(HttpServletRequest request, HttpServletResponse response, HttpSession session ){
session.removeAttribute(Const.CURRENT_USER);
// String loginToken=CookieUtil.readLoginToken(request);
// CookieUtil.delLoginToken(response,request);
// RedisPoolUtil.del(loginToken);
return ServerResponse.success(null);}
@RequestMapping(value = "/get_user_info.do")
public ServerResponse getUserInfo(HttpSession session){
User user=(User) session.getAttribute(Const.CURRENT_USER);
if (user==null){
return ServerResponse.error("用户未登录");
}
return ServerResponse.success(user);
}
}
操作相当简单,就是直接操作session, 在session里面增删查用户信息。
它会自动在redis里面加入值。
一共加入三个key,过期的时候,会先过期两个,还剩一个,但那一个是没有用的。那两个过期的时间就是设定的expiretime