秒杀项目学习笔记-分布式session

这篇博客探讨了在多服务器环境下如何实现分布式session,避免用户信息丢失。登录成功后,服务端创建token并存入redis,同时将token保存在cookie中。通过对比cookie中的token,从redis获取用户信息。文章还介绍了如何简化SpringMVC控制器的代码,通过自定义UserArgumentResolver增强参数解析,以及相关服务和控制器的配置。
摘要由CSDN通过智能技术生成
  1. 如何实现分布式session

    这样做的原因是实际情况有多台服务器,当第二请求来到的服务器不是之前的服务器,那么之前的session信息就丢失了,所以要实现分布式session。
    用户登录成功后,服务端创建一个token(UUID生成的一个字符串),把token和miaooShaUser对象存在redis当中,然后把token保存在cookie中。当下一次客户端再一次访问服务端,服务端从cookie中,获取到token,进而通过token在redis里拿到miaooShaUser对象。

  2. 延长有效期,简化controller层的代码。

    再一次调用token保存在cookie里方法,即可延长有效期。
    SpringMVC的controller方法里的参数的由来,赋值都是由WebMvcConfigurerAdapter的addArgumentResolvers实现的
    简化controller层的代码,new一个类继承WebMvcConfigurerAdapter,重写addArgumentResolvers方法。具体实现类是UserArgumentResolver,这个类拿到参数中的token和cookie中的token,然后拿到miaooShaUser对象并返回。

MiaoshaUserService

public class MiaoshaUserService {
   

    public  static final String COOKIE_NAME_TOKEN ="TOKEN";

    @Autowired
    MiaoshaUserDao miaoshaUserDao;
    @Autowired
    RedisService redisService;

    public MiaoshaUser getByid(long id){
   
        return miaoshaUserDao.getById(id);
    }
	//登录验证
    public boolean login(HttpServletResponse response, LoginEntity loginEntity){
   
        if(loginEntity==null){
   
            throw new GlobalException(CodeMsg.SERVER_ERROR);
        }
        String mobile = loginEntity.getMobile();
        String formPass = loginEntity.getPassword();
        MiaoshaUser user = getByid(Long.parseLong(mobile));
        if
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值