springboot項目集成swagger,並讓shiro放行

其實寫接口文檔的工具有很多。比如wiki,confluence(這個用的也挺多的。安裝步驟可以參見我這篇博客https://blog.csdn.net/qq_29281307/article/details/89345052

但是總結下來,還是覺得swaggerui比較好用,不僅可以在編程過程中就生成api文檔,而且還可以通過swagger調試接口,這對於後臺開發人員來說真是太方便了。避免再去通過postman測試的過程。

下面就直接上代碼了:

首先pom 文件如下:

<!--swagger2 start-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox-swagger2.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox-swagger-ui.version}</version>
        </dependency>
        <!--swagger2 end-->

其次:編寫一個SwaggerUiConfig的類來配置swagger

package com.lenovoedu.admin.config;

import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.base.Function;

import com.lenovoedu.admin.sys.constants.CommonConstants;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration
@EnableSwagger2
public class Swagger2Config {
    // 定義分隔符,配置Swagger多包
    private static final String splitor = ";";

    @Bean
    public Docket customDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(basePackage(CommonConstants.SWAGGER_SCAN_BASE_PACKAGE + splitor + "com.lenovoedu.shiro.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        Contact contact = new Contact("YuanGL", "http://edu.lenovo.com", "[email protected]");
        return new ApiInfo("聯想教育平臺API接口",           //大標題
                "聯想教育平臺《權限系統》API接口",               //小標題
                "2.0.0",                                   //版本
                "http://edu.lenovo.com",        //服務條款URL
                contact,                                           //作者
                "聯想教育",                                  //鏈接顯示文字
                "http://edu.lenovo.com",               //網站鏈接
                new ArrayList<>()
        );
    }

    /**
     * 重寫basePackage方法,使能夠實現多包訪問,複製貼上去
     * @author  teavamc
     * @date 2019/1/26
     * @param basePackage 基礎包
     * @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
     */
    public Predicate<RequestHandler> basePackage(final String basePackage) {
        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
    }

    private Function<Class<?>, Boolean> handlerPackage(final String basePackage)     {
        return input -> {
            // 循環判斷匹配
            for (String strPackage : basePackage.split(splitor)) {
                boolean isMatch = input.getPackage().getName().startsWith(strPackage);
                if (isMatch) {
                    return true;
                }
            }
            return false;
        };
    }

    private Optional<? extends Class<?>> declaringClass(RequestHandler input) {
        return Optional.fromNullable(input.declaringClass());
    }
}

至此swagger就已經配置完畢可以使用了。

如果項目中用的是shiro做權限認證的話,放行swagger需要配置以下參數:

 filterMap.put("/swagger-ui.html", "anon");
 filterMap.put("/swagger-resources/**", "anon");
 filterMap.put("/v2/**", "anon");
 filterMap.put("/webjars/**", "anon");

接下來就是swagger的使用了:在接口類和方法上加上相應的註解就可以了

@Api
@ApiOperation(value = "菜單列表分頁", notes = "分頁查詢菜單列表接口")

@ApiImplicitParams({ @ApiImplicitParam(name = "pageInfo<SysMenu>", value = "分頁對象", required = true, paramType = "body", dataType = "PageInfo<SysMenu>") })

爲了避免重複造輪子,關於swagger註解的使用就請參見這位大神的博客吧:

https://blog.csdn.net/u014231523/article/details/76522486

另外推薦一篇博客:

 

SpringBoot中Swagger2多包掃描問題

https://blog.csdn.net/teavamc/article/details/86654456

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章