阿毛
It's me !
想你所想

WebMVC拦截器过滤swagger-ui

项目common-web中,FilterConfig中指定了拦截器,对接口进行权限,用户信息等校验。会对所有url进行拦截,包含swagger的url。但正常情况下,需要不对swagger拦截。

registration.excludePathPatterns(whiteListConfig.getUrl())

可以设置url白名单,这里需要在项目的配置文件(yml或properties)中加入如下配置:

# 设置白名单,拦截器直接放行
whitelist:
  url:
    - "/swagger-ui.html"
    - "/webjars/springfox-swagger-ui/**"
    - "/swagger-resources/**"
    - "/v2/api-docs"

但是如果白名单只配置“/swagger-ui.html”的情况下,对js,css等放行,没有被拦截,png却拦截了,当白名单配置“/webjars/springfox-swagger-ui/**”就可以了(拦截规则待确定,js,css按道理也是会被拦截的)

https://file.blog.humh.cn/2020/06/d2b5ca33bd970f64a6301fa75ae2eb22-18.png

“v2/api-docs”为swagger在项目启动后,自动生成的json格式的rest api文档,如下图所示

https://file.blog.humh.cn/2020/06/d2b5ca33bd970f64a6301fa75ae2eb22-19.png

swagger-ui.html展示的数据根据api-docs解析出来的,所以也需要对其进行放行。

“/swagger-resources”用来获取api-docs的URI,所以也放行。

这样就可以继续通过swagger进行接口调用。

注意:经实践,拦截器会在资源映射之前,也就是说拦截器会对有url拦截(除过白名单),然后再去进行资源映射。比如,如果拦截器白名单中没有“/static/**”的情况下,localhost:8080/static/app.js 也会进拦截器,然后再去ResourceHandler资源映射匹配。所以我们的swagger-ui一定需要先配置拦截器白名单。然后看情况是否需要配置资源映射。该项目中我们不需要在重写WebMvcConfigurer的addResourceHandlers方法中加入swagger资源的配置了,如下

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")

                .addResourceLocations("classpath:/static/");
        // 如下两项配置可以省去
        registry.addResourceHandler("/swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

    }

swagger-ui.html及相关静态资源位于 springfox-swagger-ui jar 包中的META-INF/resources/目录下,项目编译后swagger-ui.html将添加到classpath的/META-INF/resources/下,因为WebMVC默认配置了“/META-INF/resources/”,所以不需要上述那样再配置静态资源映射(在Servlet3协议规范中,包含在JAR文件/META-INFO/resources/路径下的资源可以直接访问,无需配置静态资源映射)

humh

文章作者

站长本人,一个憨批!

发表评论

textsms
account_circle
email

想你所想

WebMVC拦截器过滤swagger-ui
项目common-web中,FilterConfig中指定了拦截器,对接口进行权限,用户信息等校验。会对所有url进行拦截,包含swagger的url。但正常情况下,需要不对swagger拦截。 registration.excl…
扫描二维码继续阅读
2020-06-14