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

yizhihongxing
  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 Boot整合Bootstrap的超详细步骤

    下面是“Spring Boot整合Bootstrap的超详细步骤”完整攻略: 1. 引入Bootstrap资源 首先,在你的Web项目中引入Bootstrap资源,具体来说,就是将Bootstrap的CSS、JS等文件引入到项目中。你可以通过下载Bootstrap的官方资源文件并手工进行配置,也可以直接使用CDN引入。 下面示例展示了通过CDN直接引入Boo…

    Java 2023年5月15日
    00
  • 微信公众平台获取access_token的方法步骤

    下面是关于微信公众平台获取access_token的方法步骤以及示例说明的完整攻略。 什么是access_token? 在微信公众平台开发中,为了保证安全性,许多接口需要access_token,access_token是认证微信公众账号的全局唯一票据,用于调用微信公众平台开发接口。 获取access_token的方法步骤 准备请求参数 请求参数是指appi…

    Java 2023年5月23日
    00
  • java与微信小程序实现websocket长连接

    下面是详细讲解“java与微信小程序实现websocket长连接”的完整攻略。 什么是WebSocket长连接 WebSocket是一种在单个TCP连接上进行全双工通信的协议。它通过在握手阶段将HTTP升级协议为WebSocket协议来实现。在握手成功后,客户端和服务器端可以互相推送消息,而不需要不断的发起HTTP请求和响应。 WebSocket长连接通常用…

    Java 2023年5月23日
    00
  • 如何用好Java枚举让你的工作效率飞起来

    如何用好Java枚举让你的工作效率飞起来 1. 枚举的基本使用 定义枚举类型 Java中的枚举是一种特殊的数据类型,可以将一组有限个数的常量定义为枚举类型,比如一周的星期、一年的季节等常量集合。枚举类型通过enum关键字定义。 public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY…

    Java 2023年5月26日
    00
  • 使用smartupload组件实现jsp+jdbc上传下载文件实例解析

    使用smartupload组件实现JSP+JDBC上传下载文件,需要经过以下步骤: 下载SmartUpload组件 从官方网站 http://smartupload.io/ 下载最新版本的SmartUpload组件(smartupload.jar),并将其添加到项目的classpath中。 配置Web.xml 在Web.xml中配置SmartUpload的处…

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

    Java Hibernate框架报错“MappingException”的原因与解决办法 当使用Hibernate框架时,可能会遇到“MappingException”错误。这个错误通常是由于以下原因之一引起的: 映射文件错误:如果您的映射文件存在问题,则可能会出现此错误。在这种情况下,需要检查您的映射文件并确保它们正确。 实体类错误:如果您的实体类存在问题…

    Java 2023年5月4日
    00
  • 聊一聊Java反射

    聊一聊Java反射 反射是Java面向对象编程中的一种重要机制,通过反射可以在运行时获取类的信息,以及操作类的实例对象。在Java编程中,反射具有广泛的应用价值,例如通过反射动态创建对象,访问对象的私有成员变量和方法等。本文将为你详细讲解Java反射的完整攻略,包含了反射的基本使用方法、常见的场景应用以及对性能的影响等方面。 反射的基本使用方法 要使用反射,…

    Java 2023年5月19日
    00
  • java多线程编程之为什么要进行数据同步

    Java多线程编程中常常需要考虑数据同步的问题,因为不同的线程可能并发地访问同一个共享数据,这就需要保证在任意时刻,只有一个线程可以修改共享数据,避免出现不可预期的结果。 为什么要进行数据同步? 数据的不一致性 因为多个线程同时访问共享数据,可能会导致数据不一致的问题,如果多个线程同时修改同一个变量,那么该变量的值最终可能会是无法预期的结果,可能是其中一个线…

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