spring boot + swagger + mybatis-plus generator

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

shiro 整合swagger2的坑

@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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容