在Linux环境下,可通过集成Spring Security、OAuth 2.0等方式为Swagger API实现权限控制,以下是具体方法:
集成Spring Security(基础认证)
pom.xml
中引入spring-boot-starter-security
和Swagger依赖。SecurityConfig
类,通过HttpSecurity
定义需认证的Swagger路径(如/swagger-ui/**
、/v2/api-docs/**
),并设置认证方式(如HTTP Basic、JWT)。UserDetailsService
接口,从数据库或内存中加载用户信息及权限。OAuth 2.0集成(授权码模式)
securitySchemes
,指定OAuth 2.0的authorizationUrl
和tokenUrl
。@SecurityRequirement
注解关联OAuth 2.0安全方案,限制特定角色的访问。基于角色的访问控制(RBAC)
@PreAuthorize
)控制访问权限。securityContext
和securityReference
关联角色权限,使文档直观反映访问限制。访问控制列表(ACL)
示例代码(Basic Auth集成):
// SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/swagger-ui/**", "/v2/api-docs/**").authenticated()
.and().httpBasic();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
// SwaggerConfig.java
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.securitySchemes(Arrays.asList(new ApiKey("Basic Auth", "Authorization", "header")))
.select().apis(RequestHandlerSelectors.basePackage("com.example.controller")).build();
}
}
说明:以上配置需结合Spring Boot项目,通过httpBasic()
启用Basic认证,访问Swagger UI时需输入用户名和密码。生产环境中建议使用数据库存储用户信息,并采用更安全的加密方式(如BCrypt密码加密)。