SpringBoot的拦截器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42969074/article/details/85211284

其实SpringBoot和SpringMVC的拦截器是一样的,SpringBoot只是抛弃了XML配置,在Java类里面完成配置而已。
代码示例:

1、创建我们自己的拦截器类并实现 HandlerInterceptor 接口,LoginInterceptor类、

/**
 * @author Tang Haorong
 * @create 2018-12-22 15:37
 * @name
 */
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("已经进入拦截器...");

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("请求处理之后进行调用");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("整个请求结束之后被调用");
    }
}

2、创建一个Java类继承WebMvcConfigurationSupport,并重写 addInterceptors 方法。之前好像是继承WebMvcConfigurerAdapter接口,但是现在好像不推荐使用这个了。WebConfig类:

/**
 * @author Tang Haorong
 * @create 2018-12-22 15:32
 * @name
 */
@Configuration //将其变成配置类
public class WebConfig extends WebMvcConfigurationSupport {

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/login");
    }
}

如果有需要拦截多个路径也可以写成如下格式:

/**
 * @author Tang Haorong
 * @create 2018-12-22 15:32
 * @name
 */
@Configuration //将其变成配置类
public class WebConfig extends WebMvcConfigurationSupport {

    //需要拦截的路径
    String[] addPathPatterns={
            "/**"
    };
    //不拦截的路径
    String[] excludePathPatterns={
           "/hello",
           "/login" 
    };

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns(addPathPatterns)
                .excludePathPatterns(excludePathPatterns);
    }
}

Controller类:

/**
 * @author Tang Haorong
 * @create 2018-12-22 15:31
 * @name
 */
@RestController
public class LoginController {

    @GetMapping(value = "/login")
    public String login(){
        return "login request not intercept";
    }
}

然后运行启动类访问:http://localhost:8080/loginlogin,由于这个请求是被拦截的,所以会进入LoginInterceptor拦截器中,控制台输出:

如果需要 WebMvcConfigurationSupport的更多用法,大家百度一下便知。

猜你喜欢

转载自blog.csdn.net/qq_42969074/article/details/85211284