springboot拦截器配置

 本文的springboot版本为2.1.6.RELEASE

1.拦截器的作用

拦截器可以用于拦截一些非法请求。有时候后端在处理请求时,需要验证该请求是否合法。例如前端有一个请求可以获取到用户本人的信息,但未登录的用户是不能查看的,这时候可以通过拦截器来验证前端请求是否合法(通常合法的请求会在header中写入token令牌)。也可以通过拦截器设置哪些请求需要拦截验证,哪些请求无需验证。

拦截器的工作流程如下:

springboot拦截器的运行流程

在接受到前端请求时,首先会调用preHandle方法进行验证,若返回false,则直接结束流程,不对请求做任何处理。若返回true,则进入controller层处理请求。postHandle方法会在controller层请求处理完成后,视图渲染之前被调用,无返回值,afterCompletion方法会在整个请求处理完成之后被调用,通常用于资源清理工作,无返回值。

2.拦截器的实现

编写拦截器类需要实现HandlerInterceptor接口,并重写preHandle,postHandle以及afterComple方法。代码如下:

package com.bfgy.cds.common.config.Interceptor;

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AuthInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (handler instanceof HandlerMethod) {
           //从request的header中获取token
            String token = request.getHeader("token");
            //验证token(这里只做了简单的验证,实际操作中可以通过Jwt来解析token)
            if ("123".equals(token)) {
                System.out.println("校验通过");
                return true;
            }
            System.out.println("校验不通过");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

 3.拦截器的配置

在实现完拦截器后,还需编写一个webMvcConfigurer来部署拦截器,需要实现webMvcConfigurer接口(在旧版本中是继承WebMvcConfigurer抽象类),注意在类上添加注解@Configuration。实现代码如下:

package com.bfgy.cds.common.config;

import com.bfgy.cds.common.config.Interceptor.AuthInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.*;

@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册TestInterceptor拦截器
        InterceptorRegistration registration = registry.addInterceptor(new AuthInterceptor());
        registration.addPathPatterns("/**");                      //所有路径都被拦截
        registration.excludePathPatterns(                         //添加不拦截路径
                "你的登陆路径",            //登录
                "/**/*.html",            //html静态资源
                "/**/*.js",              //js静态资源
                "/**/*.css",             //css静态资源
                "/**/*.woff",
                "/**/*.ttf"
        );
    }
}

这样便完成了拦截器的编写与配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值