Swagger2不被SpringSecurity框架拦截的配置及说明

  1. 配置Swagger2不被SpringSecurity框架拦截的方法

在SpringBoot项目中,只需要在WebSecurityConfigurerAdapter的configure方法中配置放行Swagger的路径即可。示例代码如下:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/v2/api-docs/**").permitAll()
            .anyRequest().authenticated();
    }
}

注解@EnableWebSecurity用于开启Spring Security的功能,在configure方法中配置了antMatchers方法中的三个Swagger相关路径,这三个路径分别对应Swagger的UI界面、Swagger的资源文件夹和Swagger的API JSON文件,通过permitAll方法进行授权访问,即不需要登录就可以访问这三个路径,其他请求需要被验证登录才可以访问。

  1. 两条示例说明Swagger2不被SpringSecurity框架拦截的配置

示例1:SpringBoot与Swagger结合的Maven项目

在SpringBoot与Swagger结合的Maven项目中,可以添加如下配置类:

@Configuration
@EnableSwagger2
@EnableWebSecurity
public class SwaggerConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/v2/api-docs").permitAll()
                .anyRequest().authenticated().and().csrf().disable();
    }

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Swagger2 API文档")
                .version("1.0")
                .build();
    }
}

在SwaggerConfig配置类中加入@EnableWebSecurity注解开启Spring Security的功能,在configure方法中配置放行Swagger的路径,其中/api-docs不需要加上两个星号,进行授权访问,然后再创建一个Docket的Bean进行Swagger的配置。

示例2:SpringBoot与Swagger结合的Gradle项目

在SpringBoot与Swagger结合的Gradle项目中,可以添加如下配置类:

@Configuration
@EnableSwagger2
@EnableWebSecurity
public class SwaggerConfig {    
    @Autowired
    private TypeResolver typeResolver;

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("API文档")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .build()
                .apiInfo(apiInfo())
                .additionalModels(typeResolver.resolve(ResponseData.class))
                .securityContexts(Lists.newArrayList(securityContext()))
                .securitySchemes(Lists.<SecurityScheme>newArrayList(apiKey()));
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Swagger2 API文档")
                .version("1.0")
                .build();
    }

    private ApiKey apiKey() {
        return new ApiKey("JWT", HttpHeaders.AUTHORIZATION, "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .forPaths(PathSelectors.regex("^(?!auth).*$"))
                .build();
    }

    List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Lists.newArrayList(
                new SecurityReference("JWT", authorizationScopes));
    }
}

同样的,需要在SwaggerConfig配置类中加入@EnableWebSecurity注解开启Spring Security的功能,在createRestApi方法中根据需要进行Swagger的配置,其中主要的操作是在securityContext和securitySchemes中加入相关的内容,通过forPaths方法和regex方法进行路径的匹配和授权访问。

以上是“Swagger2不被SpringSecurity框架拦截的配置及说明”的完整攻略,希望可以帮助你解决相关问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Swagger2不被SpringSecurity框架拦截的配置及说明 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring Security认证的完整流程记录

    Spring Security认证的完整流程记录 Spring Security是一个专门用于处理认证和授权的框架,它可以帮助我们很容易地实现常见的安全功能,例如用户认证、授权、单点登录、密码加密等。在使用Spring Security时,我们通常需要了解其认证的完整流程,以便更好地保证应用程序的安全。 下面,将通过以下步骤来描述Spring Securit…

    Java 2023年6月3日
    00
  • springboot学习之构建简单项目搭建步骤详解

    Spring Boot 学习之构建简单项目搭建步骤详解 介绍 Spring Boot 是一个快速、跨平台、微服务框架,受到了很多 Java 开发者的喜欢。构建一个简单的 Spring Boot 项目并不困难,本篇文章将详细讲解如何搭建一个简单的 Spring Boot 项目。 步骤 以下是构建简单项目所需的步骤: 步骤 1:创建一个新的 Spring Boo…

    Java 2023年5月15日
    00
  • Java重写(Override)与重载(Overload)区别原理解析

    下面是详细讲解“Java重写(Override)与重载(Overload)区别原理解析”的攻略: Java重写(Override)与重载(Overload)区别原理解析 一、重写(Override) 1.1 定义 Java中,当子类继承父类时,如果子类需要覆盖(重写)父类中的方法,就需要使用重写。重写是指在子类中重新定义的方法覆盖在父类中定义的同名方法。 1…

    Java 2023年5月26日
    00
  • Mybatis动态sql超详细讲解

    为了更好地说明“Mybatis动态sql超详细讲解”的相关内容,本次攻略将分以下几个方面进行讲解: 动态SQL简介 Mybatis动态SQL语句的使用 Mybatis动态SQL语句的实例解析 Mybatis动态SQL语句实例二 动态SQL简介 在实际开发中,SQL语句的执行往往需要根据不同的条件进行动态调整,这就是动态SQL的概念。动态SQL主要包括两种形式…

    Java 2023年5月19日
    00
  • jsp读取大对象CLOB并生成xml文件示例

    以下是针对“jsp读取大对象CLOB并生成xml文件”实现的完整攻略。 什么是CLOB CLOB指的是Character Large Object(字符大对象),是被定义为单独的文本文件的文本数据类型,可以存储大量的数据,可以达到2G的大小。CLOB在Java JDBC中表示为java.sql.Clob接口,可以使用 J2EE 应用程序中获取和设置大文本数据…

    Java 2023年6月15日
    00
  • java的Hibernate框架报错“ConstraintViolationException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“ConstraintViolationException”错误。这个错误通常是由于以下原因之一引起的: 违反了数据库约束:如果您尝试插入或更新数据时违反了数据库约束,则可能会出现此错误。在这种情况下,需要查看数据库约束并解决问题。 数据库事务问题:如果您尝试插入或更新数据时存在事务问题,则可能会出现此错误…

    Java 2023年5月4日
    00
  • SpringBoot整合SpringCloud的过程详解

    下面我将详细讲解“SpringBoot整合SpringCloud的过程详解”的完整攻略。 1. 前置知识 在开始整合 SpringBoot 和 SpringCloud 前,需要先掌握以下技术: 熟悉 SpringBoot 和 SpringCloud 的基础知识和机制; 熟练掌握分布式系统的编程思想和设计模式; 对于分布式系统的弹性设计、服务注册与发现、负载均…

    Java 2023年5月15日
    00
  • 详解Java Streams 中的异常处理

    详解Java Streams 中的异常处理 在 Java 8 中引入了 java.util.stream.Stream 对象,它为我们提供了一种基于lambda表达式的函数式编程方式,方便我们对集合、数组等数据进行快速处理。但是在使用 Stream 进行数据处理的过程中,我们也需要考虑一些异常问题,本文将详细讲解 Java Streams 中的异常处理方案。…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部