SpringBoot自定义拦截器

拦截器的介绍

Spring Boot 拦截器是 AOP 的一种实现,专门拦截对控制层的请求,主要应用于判断用户权限,拦截webSocket请求。

SpringBoot拦截器

 三个方法的介绍:

preHandle: 在controller执行之前要执行的逻辑,这个方法返回boolean值,返回true, 则请求继续执行,返回false则不会向后执行。这个也是拦截器中最常用的方法,一般我们的项目中会校验每个请求的用户信息,根据用户传过来的token来验证其是否合法。如果不合法,直接返回false ,相当于请求会被拒绝。

postHandle: 此方法将在controller执行之后执行,但是视图还没有解析,可向ModelAndView中添加数据(前后端不分离的)

afterCompletion:该方法会在整个请求结束(请求结束,但是并未返回结果给客户端)之后执行, 可获取响应数据及异常信息

@Slf4j
public class IInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 核心业务逻辑,判断是否登录等
        String token = request.getHeader("token");
        // 判断是否是有长度的字符串
        return StringUtils.hasLength(token);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        log.info("controller执行完毕!");
    }


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        log.info("请求返回结果:【{}】",request);
    }
}

配置拦截器

实现接口和方法里的业务逻辑后,这个拦截器还并没有生效,我们需要将这个拦截器注入到适配器中才能生效,适配器中其实主要就是执行一个添加拦截器的操作,并且为这个拦截器设置要拦截的路径(也可以设置不包含的路径)

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //拦截
        registry.addInterceptor(new IInterceptor())
                // 对测试接口进行拦截
                .addPathPatterns("/**")
                // 排除 login请求
                .excludePathPatterns("/login");
    }
}

测试

此时没有填写token信息,请求结果什么都没有

此时我们勾选token信息,测试结果可以看到接口正常返回请求结果 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值