SpringBoot统一校验token,编写拦截器

在之前的开发中,我们会在每一个Service中对token做处理,相同的逻辑一定是要进行统一处理的,该如何处理呢?

由于程序是运行在web容器中,每一个HTTP请求都是一个独立线程,也就是可以理解成我们编写的应用程序运行在一个多线程的环境中,那么我们就可以使用ThreadLocal在HTTP请求的生命周期内进行存值、取值操作。

在这里插入图片描述
说明:

  • 用户的每一个请求,都是一个独立的线程
  • 图中的TL就是ThreadLocal,一旦将数据绑定到ThreadLocal中,那么在整个请求的生命周期内都可以随时拿到ThreadLocal中当前线程的数据。

根据上面的分析,我们只需要在Controller请求之前进行对token做校验,如果token有效,则会拿到User对象,然后将该User对象保存到ThreadLocal中即可,最后放行请求,在后续的各个环节中都可以获取到该数据了。

如果token无效,给客户端响应401状态码,拦截请求,不再放行到Controller中。

由此可见,这个校验的逻辑是比较适合放在拦截器中完成的。

第一步

编写注解NoAuthorization

package com.tanhua.common.utils;


import java.lang.annotation.*;

@Target(ElementType.METHOD)//定义在方法上
@Retention(RetentionPolicy.RUNTIME)//注解的时间
@Documented//标识是一个注解
public @interface NoAuthorization {
   
}

编写UserThreadLocal存放user
package com.tanhua.common.utils;

import com.tanhua.common.pojo.User;

public class UserThreadLocal {
   

    private static final ThreadLocal<User> LOCAL = new ThreadLocal<>();

    private UserThreadLocal(){
   

    }

    /**
     * 将对象放入到ThreadLocal
     *
     * @param user
     */
    public static void 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值