SpringBoot集成Swagger使用SpringSecurity控制访问权限

news/2024/10/23 7:22:09/

1.加入swagger依赖

这是添加Swagger的Maven依赖配置。在项目的pom.xml文件中添加以上两个依赖可以使用Swagger。其中springfox-swagger2是Swagger API的核心依赖,springfox-swagger-ui是Swagger的UI依赖。

 		 <dependency><!--添加Swagger依赖 --><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><!--添加Swagger-UI依赖 --><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency>
复制代码

2.编写swagger配置类

这是一个Swagger配置类,使用了Spring Boot的@Configuration注解,表示这是一个配置类,使用@EnableSwagger2注解启用Swagger2,然后定义了一个名为customDocket的Bean,返回一个Docket对象,其中设置了apiInfo和select两个属性。apiInfo方法返回一个ApiInfo对象,用于设置文档说明和版本说明。select方法返回一个ApiSelectorBuilder对象,设置了扫描的包路径。这里设置了扫描com.hu.oneclick.controller包下的所有API接口。

@Configuration //声明该类为配置类
@EnableSwagger2 //声明启动Swagger2
public class SwaggerConfig{@Beanpublic Docket customDocket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.hu.oneclick.controller"))//扫描的包路径.build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("oneclick")//文档说明.version("1.0.0")//文档版本说明.build();}
}
复制代码

3.编写SpringSecurity配置类

放开swagger访问资源界面

这段代码是使用Spring Security来配置安全性,允许Swagger访问资源界面而不需要进行认证和授权。其中使用了 http.authorizeRequests() 来控制访问权限,设置了一些访问地址不需要进行认证,如 /swagger-ui.html, /v2/**, /swagger-resources/** 等等。同时,也设置了一些静态头信息,如 Access-Control-Allow-Origin, Access-Control-Expose-Headers 等等。最后,通过 permissiveRequestUrls() 方法设置了无权限接口。

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/login").anonymous().antMatchers("/user/register").anonymous().antMatchers("/user/sendEmailCode").anonymous().antMatchers("/user/sendEmailRegisterCode").anonymous().antMatchers("/swagger-ui.html").anonymous().antMatchers("/v2/**").anonymous().antMatchers("/swagger-resources/**").anonymous().antMatchers("/webjars/springfox-swagger-ui").anonymous().antMatchers("/webjars/springfox-swagger-ui/**").anonymous().anyRequest().authenticated().and().csrf().disable().formLogin().disable().sessionManagement().disable().cors().and().headers().addHeaderWriter(new StaticHeadersWriter(Arrays.asList(new Header("Access-Control-Allow-Origin", "*"),new Header("Access-Control-Expose-Headers", "Authorization")))).and().addFilterAfter(new OptionsRequestFilter(), CorsFilter.class).apply(new JsonLoginConfigurer<>()).loginSuccessHandler(jsonLoginSuccessHandler).and().apply(new JwtLoginConfigurer<>()).tokenValidSuccessHandler(jwtRefreshSuccessHandler)//设置无权限接口.permissiveRequestUrls("/login","/user/register","/user/sendEmailCode","/user/sendEmailRegisterCode","/swagger-ui.html","/swagger-resources/**","/v2/**","/webjars/springfox-swagger-ui/**","/webjars/springfox-swagger-ui").and().logout().logoutUrl("/logout").addLogoutHandler(tokenClearLogoutHandler).logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler()).and().sessionManagement().disable();}复制代码

4.启动项目访问swagger地址

访问swagger-ui.html可以跳过Spring Security的访问控制,访问Swagger文档资源。

http://localhost:8081/swagger-ui.html
复制代码

即可跳过springsecurity访问swagger

文章总结:

本文主要介绍了如何在Spring Boot项目中使用Swagger,并且解决了使用Spring Security时访问Swagger资源被拦截的问题。

首先,我们需要在pom.xml中添加Swagger和Swagger UI的依赖。然后,在配置类中使用@EnableSwagger2启用Swagger,并通过@Bean注解创建一个Docket对象来配置Swagger,包括文档说明和扫描的包路径等。

在使用Spring Security的项目中,由于默认情况下Spring Security会对所有资源进行保护,因此我们需要通过WebSecurityConfig类的configure方法来放开Swagger访问资源界面。具体来说,我们需要将Swagger资源添加到Spring Security的白名单中,使其可以被匿名访问。具体实现方式是通过http.authorizeRequests()方法进行授权配置,并添加antMatchers()方法对Swagger相关资源进行匹配,然后调用anonymous()方法将其添加到白名单中。最后,我们需要在Spring Security的配置中添加一个JwtLoginConfigurer对象,并设置无权限接口,以确保能够访问Swagger。

通过以上步骤,我们可以成功地在Spring Boot项目中使用Swagger,并解决了使用Spring Security时访问Swagger资源被拦截的问题。

总之,Swagger是一个非常好用的API文档生成工具,可以方便地展示API文档和测试接口,提高开发效率。在实际开发中,我们可以根据需要配置Swagger,并通过集成Spring Security来保证接口安全。


http://www.ppmy.cn/news/66439.html

相关文章

Python每日一练(20230511) 跳跃游戏 I\II\III\IV

目录 1. 跳跃游戏 Jump Game I 2. 跳跃游戏 Jump Game II 3. 跳跃游戏 Jump Game III 4. 跳跃游戏 Jump Game IV &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 跳跃游戏 Jump Game …

django基础知识详解

1. 安装与介绍 课程特点&#xff1a; 学习难度大&#xff0c;大部分内容需要理解并记忆文件较多易混淆学习阶段注重框架使用&#xff0c;工作阶段注重实现业务逻辑综合应用强&#xff0c;小练习少 1.1 Django框架的介绍 2005年发布,采用Python语言编写的开源web框架早期的时…

各认证机构TC申请中测试要求更新

在TC的ADDITIONAL INFORMATION 就是面料的克重、织数那些信息&#xff1f;能否明确&#xff1f; 目前 additional information 中必须提供的是&#xff1a; 纤维产品&#xff1a;纤维长度&#xff08;mm&#xff09;和纤维细度&#xff08;适用单位&#xff09; 纱线&#xff1…

Flutter音乐播放audioplayers

简介 Flutter的audioplayers是一个Flutter插件&#xff0c;可以播放多个同时的音频文件&#xff0c;支持Android、iOS、Linux、macOS、Windows和web平台。它有以下特点&#xff1a; 可以从本地文件、网络资源或内存中加载音频可以控制音量、进度、速度和循环可以播放多个音频…

idea新建springboot项目并提交码云仓库

新建springboot项目 平常我们在使用联网方式新建springboot项目时总是会遇到连接失败等这种情况 IDEA创建项目&#xff0c;本质是从官网创建并下载项目&#xff0c;然后导入本地。 创建项目连接失败&#xff0c;一般是外国网站的原因导致连接超时&#xff0c;解决方式很简单&a…

Vue响应式工具

Vue数据检测&#xff1a;isRef()、isReactive()、isReadonly() isRef&#xff1a;检测是否为ref数据&#xff0c;返回布尔值 isReactive&#xff1a;检测是否为reactive数据&#xff0c;返回布尔值 isReadonly&#xff1a; 检测是否为readonly只读数据, 返回布尔值 **当rea…

class其实是function的语法糖,底层继承实现还是基于原型链

定义在原型上的方法与定义在构造函数内部的方法不同 function Person(name, age) {this.name name;this.age age;}Person.prototype.greet function() {console.log("Hello, my name is " this.name);};const person new Person("Alice", 25);functio…

Ubuntu执行定时命令的方法

简单使用如下 输入下面的命令安装at&#xff1a; sudo apt-get install at输入下面的命令&#xff1a; # e.g. at 22:04 2021-7-7 at [time] [date]接着输入自己想要执行的命令&#xff0c;按CtrlD结束输入。 接着自己的命令即可定时执行。 详细使用 生活中&#xff0c;我…