Swagger2是一款开源的API框架,可以用于API文档的生成、测试和部署。Security授权认证则可以增强API的安全性,防止未经授权的用户访问API资源。下面是Swagger2配置Security授权认证全过程的完整攻略:
第一步:添加Security依赖
在pom.xml
文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
第二步:配置Security认证
在WebSecurityConfigurerAdapter
的子类中配置Security认证,代码如下:
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password(passwordEncoder().encode("123456")).roles("USER")
.and()
.withUser("admin").password(passwordEncoder().encode("123456")).roles("ADMIN");
}
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests().antMatchers("/swagger-ui.html", "/v2/api-docs").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll()
.and().logout().permitAll();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
此处我们使用了内存中的用户存储方式,可以在认证时通过用户名和密码来验证用户身份。
第三步:Swagger2配置
配置Swagger2,并为所有API添加认证授权信息,代码如下:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Autowired
private SecurityConfiguration securityConfiguration;
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()))
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiKey apiKey() {
return new ApiKey("apiKey", "Authorization", "header");
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.operationSelector(o -> true)
.build();
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("apiKey", authorizationScopes));
}
@Bean
SecurityConfiguration security() {
return securityConfiguration;
}
}
可以看到,我们为API定义了一个名称为apiKey
的认证方式,使用的是HTTP头Authorization
传递认证信息。我们同时还需要为所有API添加@ApiOperation
注解并标注它们的授权信息,例如:
@RestController
@RequestMapping("/api")
@Api(tags = "API")
public class ApiController {
@ApiOperation(value = "示例API", authorizations = {@Authorization(value = "apiKey")})
@GetMapping
public String hello() {
return "Hello, world!";
}
}
示例一:使用Postman模拟已认证用户请求API
如果我们希望使用Postman模拟已认证用户请求API,可以按照以下步骤进行:
- 在Postman中创建一个请求;
- 在请求头中添加
Authorization
字段并设置为Bearer <Token>
,其中<Token>
是通过用户名和密码获得的Token; - 发送请求,即可获得API的响应。
示例二:使用Swagger-UI测试未认证用户访问API
通过配置Security,我们可以限制未认证用户的访问。如果我们希望测试未认证用户访问API,可以按照以下步骤进行:
- 启动应用程序;
- 打开Swagger-UI(例如
http://localhost:8080/swagger-ui.html
); - 点击API列表中的某个API,尝试访问;
- 系统会跳转到登录页面(例如
http://localhost:8080/login
),输入正确的用户名和密码进行登录; - 登录后重新访问API,即可获得API的响应。
以上就是Swagger2配置Security授权认证全过程的完整攻略,希望能对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Swagger2配置Security授权认证全过程 - Python技术站