注:该文章基于黑马程序员中《黑马点评》软件的学习
代码资料
提取码:eh11
主要涉及的代码
MvcConfig
UserController
UserDTO
User
IUserService
UserServiceImpl
LoginInterceptor
RefreshTokenInterceptor
1.在界面输入电话号码
2.后台验证电话号码的正确性,发送生成的验证码
3.通过验证码和电话号码比对进行登入
4.登入后根据用户判断用户是否浏览界面来刷新redis中的token有效期
1.用户输入电话号码后,通过调用RegexUtils类中验证电话号码正确性的方法基础判断电话号码是否虚假
2.因为在多台服务器的情况下用session来存储信息,会存在存储浪费,这里的redis存储验证码加手机号和后面的redis存储token是一样的道理,运用redis存储2分钟时效的验证码。
1.login方法的服务是在用户输入验证码和手机号后开启的
2.该方法再次判断手机格式是否正确,然后判断根据手机号查找redis中是否存储对应的验证码值,目的是为了防止第二次收到的手机号码和上一次获取验证码的手机号码不是同一个。
3.通过验证后,判断是否是新用户,是新用户创建用户信息存入数据库(真正的业务需再拓展)
4.生成token作为用户的登入凭证,如果直接使用电话号码的话会存在泄露用户信息的可能。为了减少用户信息返回给前端,使用UserDTO类存储部分用户信息来存储在redis中
5.在redis中用hashMap的类型存储,token值做key,UserDTO类做value
并设置在redis中的存储时间,后面有拦截器来刷新用户在redis中token的有效时间来判断用户是否还在程序中浏览。
1.俩个拦截器,一个拦截全部界面用来刷新redis中token的存储时间(为了避免用户在不需要登入的界面浏览过久,导致没有促发刷新token的情况),另一个用来判断用户是否是登入过的用户。
2.注册拦截器,将全部拦截的拦截器注册为优先触发
public class MvcConfig implements WebMvcConfigurer {@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).excludePathPatterns("/shop/**","/voucher/**","/shop-type/**","/upload/**","/blog/hot","/user/code","/user/login").order(1);//用来刷新token的有效期registry.addInterceptor(new RefreshTokenInterceptor(stringRedisTemplate)).addPathPatterns("/**").order(0);}}
上一篇:大学生兼职成洗钱团伙帮凶
下一篇:图话第一代女性开发者