spring-boot 集成 swagger 问题的解决

spring-boot 集成 swaggerhtml

网上有许多关于 spring boot 集成 swagger 的教程。按照教程去作,发现没法打开接口界面。git

项目由 spring mvc 迁移过来,是一个无界面纯 API 的项目。迁移以前就支持 swagger。web

【问题描述】spring

第一个问题是无权限访问,这个问题好办,在 shiro 的配置里,设置bootstrap

  /swagger-ui.html = anon浏览器

再次测试仍不行,因而暂时禁用 shiro, 即将mvc

  /** = user --> /** = anonide

此次的错误是 404。spring-boot

 

第二个问题是没法访问 swagger-ui测试

查看控制台日志,发现程序会从 static/ 目录下找 /swager-ui.html 这个文件,但应用中根本没有 static/ 目录。而 swagger-ui.html 这个文件在 springfox-swagger-ui 这个依赖的 jar 包里。

确定是 spring-boot 处理资源文件的默认行为不支持从 jar 包里加载资源文件,须要重写默认的行为。

增长一个 WebConfig,内容以下:

@EnableWebMvc @Configuration public class WebConfig implements WebMvcConfigurer { private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "classpath*:/META-INF/resources/", }; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**") .addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS); } }

关键是高亮的部分(其他部分都是默认行为)。

再次测试,浏览器里输入  xxxx/swagger-ui.html 界面显示正常了。

 

第三个问题:与 shiro 兼容

恢复 shiro 的权限校验功能,即改回 /** = user. 再次打开 xxxx/swagger-ui.html 发现样式显示错误。

这个缘由是由于 swagger-ui 这个 jar 包里除了 swagger-ui.html 还有资源文件。资源文件被禁用了。所以须要在 shiro 配置文件里添加如下规则:

/webjars*/** = anon

 

【使用新的界面】

上面集成的是默认界面,不太好用,网上找到了另外一篇文章,使用了比较好的界面。可参照下面的连接进行配置:

https://gitee.com/xiaoym/swagger-bootstrap-ui

相关文章
相关标签/搜索