springBoot使用springSession

今天记录一下学习的springSession以及遇到的坑

下载redisDesktopManager

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里面用个注解就轻松搞定了(哭了),不过学习一下还是好的。

springboot配置filter

坑!!

最重要的坑来了,我加入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

发布了56 篇原创文章 · 获赞 1 · 访问量 1509

猜你喜欢

转载自blog.csdn.net/weixin_44841849/article/details/105059076