token的登陆校验小结

关于token做登陆拦截的思路整理:

使用到的技术:token,redis,jackson

maven加载token
编写token的生成和解析静态工具类

登陆步骤:

前端发送登录请求之后
-> 验证登陆成功
-> 把验证查找到的用户信息使用jackson转为字符串
-> 以生成的uuid为key,用户字符串为value储存在redis中
-> 给前端返回生成的token -> 前端储存到本地 验证步骤: 前端每次发送请求都要携带之前储存 在本地的token(方法见AXIOS统一文档) 存在请求头中发送到后端
-> 后端配置拦截器,拦截除登陆,首页,获取验证的其他请求
-> (此时会出现一个问题:我们只能在拦截器中获取请求头中的token,如果想要在其他方法中获取, 需要每个方法中写入HttpServletRquest,太麻烦,我们需要一个工具类, 可以随时获取全局的HttpServletRquest,以便于我们解析其中携带的请求头中的token)

package com.sm.qy28.contorller.lanjieqi;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

public class SevletUtils {
    
    

    /**
     * 获取全局的Request
     * @return
     */
    public static HttpServletRequest getRequest(){
    
    
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        return servletRequestAttributes.getRequest();

    }

}

编写解析token静态方法,获取Rquest中请求头中携带的token,解析出uuid,再用UUid为key查询 Redis中储存的用户信息字符串 -> 查询成功就代表为登录状态 如果查询不成功,或解析就不成功,不应该在拦截器中返回false,而是应该抛出异常,并处理

此时,如果抛了异常,前端就会出现跨域问题,因为如果抛异常,那么你在spring里配置的跨域处理cores就没有作用,因为我们自定义的拦截器会在cores过滤器之前执行,如果我们的拦截器直接抛异常,那么就不会进入cores过滤器,自然就不会处理跨域问题,解决方案见跨域处理

猜你喜欢

转载自blog.csdn.net/phcla/article/details/115359210