我们需要完成以下步骤来开放Swagger访问权限:
1. 添加Swagger API依赖。
2. 添加Swagger配置类。
3. 配置Spring Security以允许Swagger接口访问。
1. 添加Swagger API依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
2. 添加Swagger配置类
创建Swagger配置类SwaggerConfig.java:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
3. 配置Spring Security以允许Swagger接口访问
我们需要在Spring Security的配置类中添加以下代码:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources", "/configuration/security", "/swagger-ui.html", "/webjars/**");
}
这个配置允许访问/v2/api-docs、/configuration/ui、/swagger-resources、/configuration/security、/swagger-ui.html和/webjars/**接口,这些接口主要用于展示Swagger的API文档。
示例1
假设我们有一个控制器类FooController:
@RestController
@RequestMapping("/foo")
public class FooController {
@GetMapping
public String foo() {
return "Hello from foo";
}
}
我们现在可以通过Swagger访问该接口,地址为:http://localhost:8080/swagger-ui.html#/foo-controller
示例2
再假设我们有一个管理页面,在该页面需要登录后才能访问。因为访问这个页面是需要权限的,我们需要对该页面进行保护,这意味着不能让所有人都能访问这个页面。但是我们又希望Swagger依然能够访问该页面。
我们需要在Spring Security的配置类中添加以下代码:
@Override
protected void configure(HttpSecurity http) throws Exception {
// Other configurations ...
http.authorizeRequests()
.antMatchers("/admin/**").hasAnyRole("ADMIN")
.and()
.formLogin()
.and()
.csrf().disable()
.headers().frameOptions().disable();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources", "/configuration/security", "/swagger-ui.html", "/webjars/**");
}
在这个例子中,我们对/admin/进行了保护,这意味着只有具有ADMIN角色的用户才能访问这些页面。但我们也允许Swagger访问该接口,因为我们已经在WebSecurity中添加了对Swagger访问URL的忽略。现在我们可以使用URL http://localhost:8080/admin/ 访问管理页面,而使用 http://localhost:8080/swagger-ui.html#/ 访问Swagger页面。
以上就是Spring Security如何开放Swagger访问权限的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring security 如何开放 Swagger 访问权限 - Python技术站