Springdoc-openapi-ui의 Bearer Token Authentication(JWT)용 인증 사용 단추
springdoc-openapi-ui에서 "Authorize" 버튼을 활성화하는 방법 (OpenAPI 3.0)/swagger-ui.html
예를 들어 JWT와 같은 베어러 토큰 인증에 사용됩니다.
스프링에 추가해야 하는 주석@Controller
그리고.@Configuration
수업?
주석 대신 빈 초기화를 사용하는 것을 선호합니다.
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
@Configuration
public class OpenApi30Config {
private final String moduleName;
private final String apiVersion;
public OpenApi30Config(
@Value("${module-name}") String moduleName,
@Value("${api-version}") String apiVersion) {
this.moduleName = moduleName;
this.apiVersion = apiVersion;
}
@Bean
public OpenAPI customOpenAPI() {
final String securitySchemeName = "bearerAuth";
final String apiTitle = String.format("%s API", StringUtils.capitalize(moduleName));
return new OpenAPI()
.addSecurityItem(new SecurityRequirement().addList(securitySchemeName))
.components(
new Components()
.addSecuritySchemes(securitySchemeName,
new SecurityScheme()
.name(securitySchemeName)
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")
)
)
.info(new Info().title(apiTitle).version(apiVersion));
}
}
코드 라인
.addSecurityItem(new SecurityRequirement().addList(securitySchemeName))
를 사용하여 글로벌 보안 스키마를 추가하고 각 @Operation of 메서드에 대한 쓰기 보안을 제거할 수 있습니다.
Open에 대한 글로벌 보안 체계 정의주석을 사용한 API 3.0@io.swagger.v3.oas.annotations.security.SecurityScheme
순식간에@Configuration
콩:
@Configuration
@OpenAPIDefinition(info = @Info(title = "My API", version = "v1"))
@SecurityScheme(
name = "bearerAuth",
type = SecuritySchemeType.HTTP,
bearerFormat = "JWT",
scheme = "bearer"
)
public class OpenApi30Config {
}
주석 달기@RestController
베어러 토큰 인증(JWT)이 필요한 메서드@io.swagger.v3.oas.annotations.Operation
정의된 보안 구성표 참조:
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
각 항목에 주석을 추가하지 않으려면@Operation
마음속에@RestController
와 함께security
속성은 컨트롤러의 모든 작동에 영향을 미치는 클래스 수준에서 추가할 수 있습니다.
구성 빈은 다른 예와 동일해야 합니다.
@Configuration
@OpenAPIDefinition(info = @Info(title = "My API", version = "v1"))
@SecurityScheme(
name = "bearerAuth",
type = SecuritySchemeType.HTTP,
bearerFormat = "JWT",
scheme = "bearer"
)
public class OpenApi30Config {
}
클래스 수준에서 보안 요구 사항 추가
당신이 해야 할 일은 그냥 사용하는 것입니다.@SecurityRequirement(name = "bearerAuth")
이러한 클래스에서 API 호출을 제한할 수 있습니다.이러한 주석은 상속되므로 모든 인터페이스에 추가할 수도 있습니다.
필요한 주석을 사용하여 마커 인터페이스를 만듭니다.
@SecurityRequirement(name = "bearerAuth")
public interface SecuredRestController {
}
모든 작업에 제한을 적용할 컨트롤러에 마커 인터페이스를 추가합니다. 예:
@RestController
@RequestMapping("/hello")
public class HelloController implements SecuredController {
@GetMapping
public String hello() {
return "Hello World";
}
@GetMapping("/{name}")
public String helloWithName(@PathVariable String name) {
return "Hello " + name;
}
}
마커 인터페이스가 다음과 같이 말하지 않아도 이 작업을 수행할 수 있습니다.
@RestController
@RequestMapping("/hello")
@SecurityRequirement(name = "bearerAuth")
public class HelloController {
...
}
이제 작업이 모두 보호되고 JWT 토큰이 필요합니다.
방법 수준에서 보안 요구 사항 추가
다른 게시물에서 말했듯이, 당신은 다음을 추가해야 합니다.@SecurityRequirement
당신에게@Operation
방법에 대한 주석입니다.
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
public String hello() {
return "Hello World";
}
@GetMapping("/{name}")
public String helloWithName(@PathVariable String name) {
return "Hello " + name;
}
}
이렇게 하면 첫 번째 작업만 제한되고 두 번째 작업은 제한되지 않습니다.
언급URL : https://stackoverflow.com/questions/59898874/enable-authorize-button-in-springdoc-openapi-ui-for-bearer-token-authentication
'sourcetip' 카테고리의 다른 글
Angular/Karma 장치 테스트 오류 "1개의 타이머가 대기열에 있습니다." (0) | 2023.08.26 |
---|---|
작곡가 레이블에 종속성(docrine/dbal) 설치 (0) | 2023.08.26 |
DOM 문서::로드HTML 오류 (0) | 2023.08.26 |
Xcode 버전 4.6.2(4H1003) 컴파일러 오류 (0) | 2023.08.26 |
PHP에서 MySQL 데이터베이스를 백업하는 방법은 무엇입니까? (0) | 2023.08.26 |