spring boot + swagger + mybatis-plus generator
[TOC]
參考資料
github/SpringForAll/spring-boot-starter-swagger
這是一個整合套件,readme.xml 中包含了詳細配置說明,包括:
- pom.xml 配置
- 啟動類注解配置
- application.yml 配置
pom.xml
<!-- swagger api 生成器套件 -->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
啟動類開啟 swagger
在啟動類上添加 @EnableSwagger2Doc 注解,參考
import com.spring4all.swagger.EnableSwagger2Doc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableSwagger2Doc
@SpringBootApplication
public class BasicApplication {
public static void main(String[] args) {
SpringApplication.run(BasicApplication.class, args);
}
}
定義靜態(tài)資源映射目錄
SpringBoot集成Swagger2配置及出現(xiàn)的問題記錄
原因:
因為swagger-ui.html相關(guān)的所有前端靜態(tài)文件都在springfox-swagger-ui-x.x.x.jar里面,在yml文件中配置了mvc.static-path-pattern: /static/** 導致swagger-ui.html相關(guān)的所有前端靜態(tài)文件映射不到。
解決方案:定義靜態(tài)資源映射目錄,addResoureHandler指的是對外暴露的訪問路徑,addResourceLocations指的是文件放置的目錄
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
}
}
application.yml 配置
這個配置隨環(huán)境走,由具體的環(huán)境控制是否開關(guān)
swagger:
enabled: true
host: 10.11.18.201:8061
這個配置是公共的,不展示 spring boot 自帶/error請求路徑下的 api 接口。
swagger:
exclude-path: /error
authorization:
key-name: Authorization
mybatis-plus generator 配置
/**
* 全局配置
*
* @param projectPath
* @return
*/
private static GlobalConfig createGlobalCfg(String projectPath) {
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("rbzy");
gc.setOpen(false);
// 實體屬性 Swagger2 注解
gc.setSwagger2(true);
return gc;
}
鑒權(quán)問題
自定義攔截器配置
spring boot 加入攔截器后swagger不能訪問問題
不要攔截這些
"/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**"
spring boot 集成swagger并且使用攔截器的配置問題
寫的比較詳細一些
另外提到了 /error,不攔截 spring boot 自帶
/error請求路徑下的 api 接口。
import com.wdzggroup.rbzy.oa.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.config.annotation.*;
/**
* 加載靜態(tài)資源類
* liuzhize 2019年3月7日下午3:25:49
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/error")
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html");
}
@Bean
public LoginInterceptor LoginInterceptor() {
return new LoginInterceptor();
}
}
shiro
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
filterChainDefinitionMap.put("/swagger-ui.html", "anon");
filterChainDefinitionMap.put("/swagger-resources/**", "anon");
filterChainDefinitionMap.put("/webjars/**", "anon");
filterChainDefinitionMap.put("/v2/**", "anon");
//配置shiro默認登錄界面地址,前后端分離中登錄界面跳轉(zhuǎn)應由前端路由控制,后臺僅返回json數(shù)據(jù)
Map<String, Filter> filters = shiroFilterFactoryBean.getFilters();
// 注意這里不要用Bean的方式,否則會報錯
filters.put("authc", new ShiroUserFilter());
shiroFilterFactoryBean.setFilters(filters);
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
swagger 生成的 api 接口調(diào)用時的鑒權(quán)問題
詳見參考資料中,github/SpringForAll/spring-boot-starter-swagger swagger 套件的 readme.md 通過配置實現(xiàn)鑒權(quán),摘錄如下
swagger:
authorization:
key-name: Authorization
項目發(fā)布 docker 后,swagger 生成的 api 拿不到端口號問題
通過指定端口號,強制要求 swagger 按照指定的端口號請求接口
swagger:
host: 10.11.18.201:8061