将 Session 持久化到 Redis 上

博客系统:个人博客系统(Spring Boot、Spring MVC、MyBatis)_拾.柒.的博客-CSDN博客

目录

项目实现

添加依赖

在 application.yml 文件中配置 Redis 连接信息

具体实现

存储 Session

读取 Session


哈喽 ~ 很高兴见到你!话不多说,开始学习~

本篇是针对个人博客系统功能的扩展之一,在完成了咱们个人博客系统的基础模块之后,就可以在原来的基础上进行功能的扩展了,基础模块在相对应的博客中已经比较清晰的分享过了,这里就不再进行回顾了哈,此篇的任务就是将个人博客系统项目中登录的 Session 信息持久化到 Redis 上,好了,开始正题!


项目实现

添加依赖

在项目的 pom.xml 中添加相关依赖,reload maven

        <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>

在 application.yml 文件中配置 Redis 连接信息

  spring:
  #配置redis
    redis:
      database: 0 #0号仓库
      host: 127.0.0.1
      port: 6379
  #配置session
    session:
      store-type: redis #配置session信息的存储仓库为redis
      redis:
        flush-mode: on_save
        namespace: spring:session

#session的过期时间
server:
  port: 8080
  servlet:
    session:
      timeout: 1800

具体实现

存储 Session

服务器接收到来自客户端的请求,经校验通过后,对请求中的数据(即用户名和密码)进行 Session 保存信息,持久化到 Redis 上

  /**
     * 登录
     */

    private Object lock = new Object();
    @RequestMapping("/login")
    public AjaxResult login(HttpServletRequest request, HttpServletResponse response,
                            String username, String password)
            throws IOException, ParseException, ParseException {
        //非空校验
        if(!StringUtils.hasLength(username) || !StringUtils.hasLength(password)) {
            return AjaxResult.fail(-1, "账号或密码错误,请稍后重试!");
        }

        //验证用户
        Userinfo userinfo = userService.getUserByName(username);
        if(userinfo == null || !StringUtils.hasLength(userinfo.getUsername()) ||
                !StringUtils.hasLength(userinfo.getPassword())) {
            return AjaxResult.fail(-2, "账号不存在!");
        }
        //ps:这里注意要对加盐密码解密
        if(userinfo == null || !PasswordUtils.check(password, userinfo.getPassword())) {
            //用户名不存在或密码错误
            return AjaxResult.fail(-5, "账号或密码错误,请稍后重试!");
        }

        //登录成功 创建会话信息持久到redis
        HttpSession session = request.getSession(true);
        session.setAttribute(AppVariable.USER_SESSION_KEY, userinfo);
        return AjaxResult.success(1);
    }

读取 Session

服务器接收请求后,从 Redis 上获取 Session 信息,从而获取用户信息

    /**
     * 用户信息查询(通过 Redis )
     * @param session
     * @return
     */
   @RequestMapping("/show")
    public AjaxResult getUserinfo(HttpSession session) {
        Userinfo userinfo = (Userinfo) session.getAttribute(AppVariable.SESSION_KEY);
        //非空校验
        if(userinfo == null && !StringUtils.hasLength(userinfo.getUsername()) &&
        !StringUtils.hasLength(userinfo.getPassword())) {
           //校验为空
           return AjaxResult.fail(-1,"参数错误");
        }
        return AjaxResult.success(userinfo.getUsername());
   }

不难发现,此处存储和读取 Session 的代码和之前的方式很像,这是因为将 Session 存储到 Redis 由框架帮我们完成了,我们只需遵守约定可以了


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值