springboot项目集成swagger,并让shiro放行

其实写接口文档的工具有很多。比如wiki,confluence(这个用的也挺多的。安装步骤可以参见我这篇博客https://blog.csdn.net/qq_29281307/article/details/89345052)

但是总结下来,还是觉得swaggerui比较好用,不仅可以在编程过程中就生成api文档,而且还可以通过swagger调试接口,这对于后台开发人员来说真是太方便了。避免再去通过postman测试的过程。

下面就直接上代码了:

首先pom 文件如下:


        
            io.springfox
            springfox-swagger2
            ${springfox-swagger2.version}
        
        
            io.springfox
            springfox-swagger-ui
            ${springfox-swagger-ui.version}
        
        

其次:编写一个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
     */
    public Predicate basePackage(final String basePackage) {
        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
    }

    private Function, 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> 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", value = "分页对象", required = true, paramType = "body", dataType = "PageInfo") })

为了避免重复造轮子,关于swagger注解的使用就请参见这位大神的博客吧:

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

另外推荐一篇博客:

 

SpringBoot中Swagger2多包扫描问题

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

你可能感兴趣的:(微服务)