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