- 配置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方法进行授权访问,即不需要登录就可以访问这三个路径,其他请求需要被验证登录才可以访问。
- 两条示例说明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技术站