Spring拦截器实现鉴权

某些网站,是需要用户登录才能访问,如果对每一个页面判断用户是否登录,会造成代码冗余,在拦截器中进行鉴权操作可以减少代码的冗余.
图片是慕课网-格鲁老师的流程图
这里面涉及两个知识点:拦截器ThreadLocal
有两个步骤:
1.实现HandlerInterceptor接口,编写拦截器
2.将拦截器加载入WebMvcConfigurerAdapter中,绑定拦截的urlpathpattern
在这里插入图片描述

拦截器

HandlerInterceptor是Spring提供的处理器拦截器接口,以下为源码.

public interface HandlerInterceptor {
   
    //Controller 执行之前执行,返回 true 表示继续流程,false 中断当前流程,但会执行之前拦截器的 afterCompletion 方法
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   
        return true;
    }
    //Controller 方法调用之后,视图渲染之前执行
    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
   
    }
    //渲染视图之后执行
    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
   
    }
}

ThreadLocal

在这里插入图片描述
多个线程访问同一个变量,容易出现并发问题,我们经常采用同步来解决这个问题.
而ThreadLocal使每个线程都访问的是自己的变量,避免了线程安全的问题
下面写个例子来验证一下

public class ThreadLocaleTest {
   

    public static ThreadLocal<String> threadLocal = new ThreadLocal<>();
    public static void main(String[] args) {
   
        Thread first = new Thread(new Runnable() {
   

            @Override
            public void run() {
   
                threadLocal.set(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值