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日

相关文章

  • 微信小程序扫描二维码获取信息实例详解

    微信小程序扫描二维码获取信息实例详解 背景 随着移动互联网的普及和快速发展,微信小程序已经成为了人们日常生活中必不可少的一部分。其中一项最常见的功能是扫描二维码获取信息。本文将详细讲解微信小程序扫描二维码获取信息的实现过程,包括如何生成二维码并在小程序中读取二维码信息。 生成二维码 在微信小程序中生成二维码有很多方法,可以使用第三方库,也可以使用微信提供的A…

    Java 2023年5月23日
    00
  • Java中的循环笔记整理(必看篇)

    Java中的循环笔记整理(必看篇) 循环是编程中的重要结构之一,是人们掌握编程技能的基础。Java中提供了三种类型的循环结构,分别是for、while和do-while循环,下面我们一起来了解一下。 for循环 for循环是一种常用的循环结构,它的基本语法如下所示: for(初始化; 条件; 更新) { // 执行循环体语句 } 其中,初始化只会在循环开始前…

    Java 2023年5月26日
    00
  • Java多线程的用法详解

    Java多线程的用法详解 Java多线程是Java编程中非常重要的一个部分,在Java中通过多线程实现并发编程,提高程序的执行效率与响应能力,本文将详细讲解Java多线程的用法。 为什么需要多线程? 在介绍Java多线程之前,我们需要了解为什么需要多线程。首先,操作系统分给每个进程固定的资源是有限的,而非多线程的单进程只能利用其中一个CPU并执行一个任务。而…

    Java 2023年5月19日
    00
  • 深入浅出讲解Java8函数式编程

    深入浅出讲解Java8函数式编程 简介 Java8引入了函数式接口和Lambda表达式,为Java语言添加了函数式编程的特性。本文将从以下几个方面深入浅出地讲解Java8函数式编程: 函数式接口(Functional Interface) Lambda表达式 方法引用(Method Reference) Stream API Optional类 函数式接口 …

    Java 2023年5月26日
    00
  • springboot项目整合druid数据库连接池的实现

    下面是 Spring Boot 项目整合 Druid 数据库连接池的实现的完整攻略。 1. 引入 Druid 依赖 在Maven或Gradle项目中,需要在项目依赖中引入 Druid 数据库连接池的依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId&…

    Java 2023年6月16日
    00
  • SpringMVC+Mybatis二维码实现多平台付款(附源码)

    下面我将详细讲解“SpringMVC+Mybatis二维码实现多平台付款(附源码)”的完整攻略。 1. 概述 本文介绍如何使用SpringMVC和Mybatis实现多平台付款系统,主要包括以下几个方面。 使用SpringMVC实现Web应用程序的开发; 使用Mybatis对数据库进行访问; 使用二维码实现多平台付款。 2. 开发环境和技术栈 JDK 1.8 …

    Java 2023年5月26日
    00
  • SpringBoot整合Redis、ApachSolr和SpringSession的示例

    下面是”SpringBoot整合Redis、ApachSolr和SpringSession的示例”的完整攻略,其中包括两个示例。 1. 环境搭建 首先,在我们开始之前,确保你已经正确地安装了Java、Maven、Redis、ApachSolr和SpringBoot。 1.1 安装Redis 可以在Redis官网上,下载并安装最新版的Redis。如果你使用的是…

    Java 2023年5月20日
    00
  • Java 字符串转float运算 float转字符串的方法

    一、Java字符串转float运算 在Java中,可以通过以下的方式将字符串转换为float类型: 1.使用Float.parseFloat(String str)方法进行转换: String s1 = "5.5"; float f1 = Float.parseFloat(s1); System.out.println("f1 …

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