Redis技术学习|实战项目记录|短信登录(重点:拦截器)+ Redis代替session存储用户登录信息

时间:2024-03-22 12:12:39

学习资料声明

黑马程序员的Redis学习视频:黑马程序员Redis入门到实战教程
需要用到的知识:linux(推荐韩顺平老师的教程,学到p30,创建好虚拟机和简单的几个命令就好。)SSM。SpringBoot。
还用到了MybatisPlus(还没学。)

短信登录

1.整体思路

在这里插入图片描述

2.使用session实现

2.1 申请验证码请求

接口:请求格式在这里插入图片描述
在这里插入图片描述

2.2 登录请求

在这里插入图片描述

重点在于为什么这里不需要像其他项目那样返回了一个jwt令牌作为登录凭证:因为是基于session实现的登录,session自带一个以cookie形式存在于交互的sessionID。

2.3 登录验证|拦截器

在这里插入图片描述
这拦截器的使用需要好好复习一下,首先分两部分(拦截器本身+注册拦截器)

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if(user == null){
            response.setStatus(401);//未授权
            return false;
        }
        UserHolder.saveUser((UserDTO) user);
        return true;

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        UserHolder.removeUser();
    }
}

注册拦截器

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .excludePathPatterns(
                        "/user/code",
                        "/user/login"
                );
    }
}

2.4 集群的session共享问题

在这里插入图片描述
session本身有提供session共享的功能,但是因为拷贝延迟和内存浪费的问题就无法流行使用。
在这里插入图片描述

3.基于Redis实现共享Session

3.1怎么设计redis存储数据格式选择和key的选择

token可以直接使用string。
用户信息的话,需要使用Hash。

3.2具体实现过程和基础篇一致。

3.3额外要注意如何模拟Session的生存周期

在Login的拦截器之前设置一个拦截器拦截所有请求,更新时间。