spring boot + swagger + mybatis-plus generator
[TOC]
參考資料
github/SpringForAll/spring-boot-starter-swagger
這是一個(gè)整合套件,readme.xml 中包含了詳細(xì)配置說(shuō)明,包括:
- pom.xml 配置
- 啟動(dòng)類(lèi)注解配置
- application.yml 配置
pom.xml
<!-- swagger api 生成器套件 -->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
啟動(dòng)類(lèi)開(kāi)啟 swagger
在啟動(dòng)類(lèi)上添加 @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)的問(wèn)題記錄
原因:
因?yàn)閟wagger-ui.html相關(guān)的所有前端靜態(tài)文件都在springfox-swagger-ui-x.x.x.jar里面,在yml文件中配置了mvc.static-path-pattern: /static/** 導(dǎo)致swagger-ui.html相關(guān)的所有前端靜態(tài)文件映射不到但两。
解決方案:定義靜態(tài)資源映射目錄胳施,addResoureHandler指的是對(duì)外暴露的訪(fǎng)問(wèn)路徑奇适,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 配置
這個(gè)配置隨環(huán)境走谜酒,由具體的環(huán)境控制是否開(kāi)關(guān)
swagger:
enabled: true
host: 10.11.18.201:8061
這個(gè)配置是公共的,不展示 spring boot 自帶/error
請(qǐng)求路徑下的 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);
// 實(shí)體屬性 Swagger2 注解
gc.setSwagger2(true);
return gc;
}
鑒權(quán)問(wèn)題
自定義攔截器配置
spring boot 加入攔截器后swagger不能訪(fǎng)問(wèn)問(wèn)題
不要攔截這些
"/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**"
spring boot 集成swagger并且使用攔截器的配置問(wèn)題
寫(xiě)的比較詳細(xì)一些
另外提到了 /error僻族,不攔截 spring boot 自帶
/error
請(qǐng)求路徑下的 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)資源類(lè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默認(rèn)登錄界面地址屡谐,前后端分離中登錄界面跳轉(zhuǎn)應(yīng)由前端路由控制述么,后臺(tái)僅返回json數(shù)據(jù)
Map<String, Filter> filters = shiroFilterFactoryBean.getFilters();
// 注意這里不要用Bean的方式,否則會(huì)報(bào)錯(cuò)
filters.put("authc", new ShiroUserFilter());
shiroFilterFactoryBean.setFilters(filters);
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
swagger 生成的 api 接口調(diào)用時(shí)的鑒權(quán)問(wèn)題
詳見(jiàn)參考資料中愕掏,github/SpringForAll/spring-boot-starter-swagger swagger 套件的 readme.md 通過(guò)配置實(shí)現(xiàn)鑒權(quán)度秘,摘錄如下
swagger:
authorization:
key-name: Authorization
項(xiàng)目發(fā)布 docker 后,swagger 生成的 api 拿不到端口號(hào)問(wèn)題
通過(guò)指定端口號(hào),強(qiáng)制要求 swagger 按照指定的端口號(hào)請(qǐng)求接口
swagger:
host: 10.11.18.201:8061