学习资料声明
黑马程序员的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的拦截器之前设置一个拦截器拦截所有请求,更新时间。