欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

token的登陆校验小结

程序员文章站 2022-04-18 09:31:28
...

关于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过滤器,自然就不会处理跨域问题,解决方案见跨域处理

相关标签: 总结 java