Spring Boot2 拦截器对静态资源的放行

Spring Boot2 拦截器对静态资源的放行

在前面的案例中,我们大量的使用了拦截器。SpringBoot2.x的拦截器会对静态资源进行拦截。下面介绍以下如何在拦截路径的同时,对静态资源进行放行。在前后端分离的项目中,无需进行此操作,前后端分离项目中我们只需要返回状态码,由前端的路由实现页面权限控制。

addResourceHandlers方法内,映射静态资源

addInterceptors方法内指定放行规则

 /**
     * 指定静态资源的位置 非前后端分离项目需要注册
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /*静态资源的位置*/
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");
        /*放行swagger*/
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    /**
     * 注册拦截器
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {


        //放行路径
        List<String> jwtExcludePatterns = new ArrayList();
        //druid
        jwtExcludePatterns.add("/druid/**");
        //swagger
        jwtExcludePatterns.add("/webjars/**");
        jwtExcludePatterns.add("/swagger/**");
        jwtExcludePatterns.add("/v2/**");
        jwtExcludePatterns.add("/swagger-ui.html/**");
        jwtExcludePatterns.add("/swagger-resources/**");
        //系统静态资源的放行  前后端分离项目不用考虑静态资源的放行,只需要验权即可
        jwtExcludePatterns.add("/");
        jwtExcludePatterns.add("/index.html");
        jwtExcludePatterns.add("/css/**");
        jwtExcludePatterns.add("/js/**");
        //需要放行的接口
        jwtExcludePatterns.add("/sys/login");
        jwtExcludePatterns.add("/login");
        jwtExcludePatterns.add("//test/**");


        registry.addInterceptor(new JWTInterceptor())
                .addPathPatterns("/**")
                //放行的静态资源列表
                .excludePathPatterns(jwtExcludePatterns);

        //注册短信验证码接口的请求次数拦截器
        AccessInterceptor codeAccessInterceptor = getCodeAccessInterceptor();
        registry.addInterceptor(codeAccessInterceptor)
                .addPathPatterns(codeAccessInterceptor.getInterceptorUrl());


        //注册手机号校验拦截器
        registry.addInterceptor(getSMSValidateInterceptor())
                .addPathPatterns("/user/code");

        //用户注册参数校验 已经使用全局校验实现
//        registry.addInterceptor(getRegisterValidateInterceptor())
//                .addPathPatterns("/user/register");

    }
原文地址:https://www.cnblogs.com/zhangruifeng/p/13489601.html