学习资料声明
黑马程序员的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 {@Overridepublic 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;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {UserHolder.removeUser();}
}
注册拦截器
@Configuration
public class MvcConfig implements WebMvcConfigurer {@Overridepublic 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的拦截器之前设置一个拦截器拦截所有请求,更新时间。