JWT 설정을 전부다 해놨다고 하면, 아래와 같이 swaagerconfig 파일만 수정하면 작동이 된다.
apiKey 메소드에서 저장한 이름이랑, Springsecurity 에서 키값을 비교할때 헤더에서 꺼내오는 키값 이름이 다를경우 오류가 발생하니.
꼭 확인하도록하자
기존에는 api() 메소드만 있었는데, 하단의 JWT 인증 사용하기 위한 메소드를 추가
apiKey() 메소드에서는 사용할 키 방식, 키값의 이름, 키, 헤더에 포함됐다는 내용임
=================================================================================================================
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
private String oauth2ServerUrl;
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()));
}
private ApiInfo apiInfo() {
return new ApiInfo(
"Stock RestAPI",
"주식파싱",
"1.0",
"termsofserviceurl",
new Contact("kimsungchul", "http://github.com/kkimsungchul", "kimsc1218@gmail.com"),
"License of API",
"API license URL",
Collections.emptyList());
}
//스웨거에서 사용할 토큰값에 대한 정보 설정
// (키종류 , 키이름 , 헤더값이라는 표시)
//여기서 설정한 키이름으로, JwtTokenUtil 클래스에서 꺼내서 사용함
private ApiKey apiKey() {
return new ApiKey("JWT", "jwt", "header");
}
private SecurityContext securityContext() {
return SecurityContext.builder().securityReferences(defaultAuth()).build();
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("JWT", authorizationScopes));
}
}
=================================================================================================================
https://recordsoflife.tistory.com/606
https://codeinlife.tistory.com/47
https://stackoverflow.com/questions/49785592/bearer-token-in-postman
https://velog.io/@cada/%ED%86%A0%EA%B7%BC-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EC%97%90%EC%84%9C-bearer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
인증을 하려고하는데 토큰값이 일치하지않다고 나옴.
내가 참고 했던 사이트에서는 토큰값 앞에 "Bearer " 를 전송해서 보낸다고 하였음.
난 안보내는데.. 그래서 이거에 대해 찾아본 내용은 위의 링크들에 있음
if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer ")) { 이부분에서 requestTokenHeader.startsWith("Bearer ") 이거를 제거했음