springboot-shiro项目集成swagger2

集成版本:

  • SpringBoot: 2.1.6.RELEASE
  • Shiro: 1.4.0
  • Swagger2: 2.8.0

swagger

依赖

<!-- shiro -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.0</version>
</dependency>
<dependency>
    <groupId>org.crazycake</groupId>
    <artifactId>shiro-redis</artifactId>
    <version>3.2.2</version>
</dependency>
<dependency>
    <groupId>com.github.theborakompanioni</groupId>
    <artifactId>thymeleaf-extras-shiro</artifactId>
    <version>2.0.0</version>
</dependency>
<!-- swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>

swagger2配置类

@EnableSwagger2
public class Swagger2Config {
    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.jiay.autho"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("Autho-api文档")
                .description("权限系统api文档")
                //服务条款网址
                .termsOfServiceUrl("")
                .version("1.0")
                .contact(new Contact("JIAY","https://gladitor.github.io/myblog/","eicool110@outlook.com"))
                .build();
    }
}

shiro配置

shiro中添加swagger的放行,否则无法访问swagger-ui.html

//swagger放行配置
filterChainDefinitionMap.put("/swagger-ui.html", "anon");
filterChainDefinitionMap.put("/swagger/**", "anon");
filterChainDefinitionMap.put("/swagger-resources/**", "anon");
filterChainDefinitionMap.put("/v2/**", "anon");
filterChainDefinitionMap.put("/webjars/**", "anon");
filterChainDefinitionMap.put("/configuration/**", "anon");
//必须加以下配置,否则无法正常访问swagger中接口内容
filterChainDefinitionMap.put("/configuration/security", "anon");
filterChainDefinitionMap.put("/configuration/ui", "anon");

ISSUE

按上面配置可正常访问swagger-ui.html,并能正常使用swagger。
下面列出swagger集成中配到的几个问题:

  • Unable to infer base url.
    原因是shiro放行中配置不对,需要按【//swagger放行配置】处配置。
  • 按网上的常规配置后能访问swagger-ui.html但接口内容无法正常查看及测试
    原因是shiro放行配置不完全,需要加上实例中shiro放行配置最后两行。关于这两行有疑问的朋友参考下面shiro通配符说明。

shiro通配符说明

?  匹配单个字符,正确路径/admin, 那么/admin?=authc可以匹配admin + 单个字符,admin12就不能匹配

*  能匹配任意字符,admin,admin1, admin12, 都可以匹配,多层路径不能匹配,比如admin12/12

**  匹配多层路径,admin/**  能匹配admin/1222/12112...., 但是admin12/1545不能匹配

欢迎来访

  • 有问题欢迎留言或加交流qq:825121848
  • 转载请注明出处
  • 请小编喝茶~
Last Updated: 4/16/2022, 11:05:56 AM