最新看完这篇你还不明白如何解决分布式Session?,阿里正式启动2024届春季校招

最后

各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

org.springframework.session

spring-session-data-redis




> 添加Redis配置



Redis配置

spring:

redis:

# 服务器地址

host: localhost

# 端口

port: 6379

# 数据库

database: 0

# 超时时间

connect-timeout: 10000ms

lettuce:

  pool:

    # 最大连接数

    max-active: 8

    # 最大连接阻塞等待时间 默认 -1

    max-wait: 10000ms

    # 最大空闲时间 默认8

    max-idle: 200

    # 最小空闲连接 默认8

    min-idle: 5



> 业务逻辑实现



/**

 * 登录功能

 * @param loginVo

 * @return

 */

@Override

public RespBean doLogin(LoginVo loginVo, HttpServletRequest request, HttpServletResponse response) {



    String username = loginVo.getUserName();

    String password = loginVo.getPassword();



    User user = userMapper.selectByUserName(username);

    if (user == null){

        throw new GlobalException(RespBeanEnum.LOGIN_ERROR);

    }

    //判断密码是否正确

    if (!MDUtils.formPassToDBPass(password,user.getSalt()).equals(user.getPassword())){

        throw new GlobalException(RespBeanEnum.LOGIN_ERROR);

    }

    //使用UUID生成字符串代替Cookie

    String ticket = UUIDUtil.uuid();

    request.getSession().setAttribute(ticket,user);

    CookieUtil.setCookie(request,response,"userTicket",ticket);

    return RespBean.success();

}



> 视图控制层



/**

 * 跳转商品列表

 * @param session

 * @param model

 * @return

 */

@RequestMapping("/toList")

public String toList(HttpSession session, Model model,@CookieValue("userTicket")String ticket){

    if (StringUtils.isEmpty(ticket)){

        return "login";

    }

    User user = (User) session.getAttribute(ticket);

    if (user == null){

        return "login";

    }

    model.addAttribute("user",user);

    return "goodsList";

}



> 登录测试



![在这里插入图片描述](https://img-blog.csdnimg.cn/b7af2c483bd844cdb2b1b923e01bddb1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rS-IOWkpyDmmJ8u,size_20,color_FFFFFF,t_70,g_se,x_16)  

打开Redis管理软件发现Session信息已经添加到Redis中了  

![在这里插入图片描述](https://img-blog.csdnimg.cn/b17261c99cf74643955b5f2680fc1806.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rS-IOWkpyDmmJ8u,size_20,color_FFFFFF,t_70,g_se,x_16)



##### []( )2\. Redis解决分布式Session



> 导入依赖



org.springframework.boot

spring-boot-starter-data-redis

org.apache.commons

commons-pool2




> Redis配置参考 【SpringSession - Redis解决分布式Session】



> 业务逻辑层



@Override

public RespBean doLogin(LoginVo loginVo, HttpServletRequest request, HttpServletResponse response) {



    String username = loginVo.getUserName();

    String password = loginVo.getPassword();



    User user = userMapper.selectByUserName(username);

    if (user == null){

        throw new GlobalException(RespBeanEnum.LOGIN_ERROR);

    }

    //判断密码是否正确

    if (!MDUtils.formPassToDBPass(password,user.getSalt()).equals(user.getPassword())){

        throw new GlobalException(RespBeanEnum.LOGIN_ERROR);

    }

    //成功Cookie

    String ticket = UUIDUtil.uuid();

    //将用户信息存入到redis中

    redisTemplate.opsForValue().set("userTicket",ticket);

    redisTemplate.opsForValue().set("user:"+ticket,user);

    //request.getSession().setAttribute(ticket,user);

    CookieUtil.setCookie(request,response,"userTicket",ticket);

    return RespBean.success();

}



/**

 * 根据cookie获取cookie

 * @param ticket

 * @return

 */

@Override

public User getUserByByCookie(String ticket,HttpServletRequest request,HttpServletResponse response) {

    if (StringUtils.isEmpty(ticket)){

        return null;

    }

    User user = (User) redisTemplate.opsForValue().get("user:" + ticket);

    if (user == null){

        CookieUtil.setCookie(request,response,"userTicket",ticket);

    }

    return user;

}



> 视图控制层



总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

[外链图片转存中…(img-rnMZvBQK-1715678055116)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值