WebFlux spring graphql 에서 Header Handling 하기
728x90
WebFlux 에서는 WebMvc 와는 다른 방법으로 header 를 handling 해야합니다.
login 을 했을때 cookie 를 set 하는 예시로 시작해보겠습니다.
@MutationMapping
fun login(
@Argument input: LoginInput,
context: GraphQLContext
): Mono<AuthToken> {
return memberService.login(input)
.flatMap {
context.put("token", it.token)
Mono.just(AuthToken(it.tokenType, it.token))
}
}
GraphqlContext 에 key value 형태로 token 을 저장합니다.
그리고 headerInterceptor 를 만들어 context 의 값을 꺼내 request header 에 set 합니다.
@Component
class HeaderInterceptor : WebGraphQlInterceptor {
override fun intercept(request: WebGraphQlRequest, chain: WebGraphQlInterceptor.Chain): Mono<WebGraphQlResponse> {
return chain.next(request).doOnNext { response ->
var value: String = response.executionInput.graphQLContext.get("token")
var cookie = ResponseCookie.from("token", value)
.maxAge(Duration.ofDays(1L))
.build()
response.responseHeaders.add(HttpHeaders.SET_COOKIE, cookie.toString())
}
}
}
spring webFlux graphql 에서는 controller 에서 바로 request 객체에 접근하는 법을 찾지 못해 context 에 값을 저장하고 interceptor 에서 처리하는 방식으로 해결 했습니다.
context -> interceptor 방식을 알아두면 webFlux 에서 header 를 좀더 쉽게 handling 할수 있을거 같습니다.
728x90
'Kotlin > GraphQL' 카테고리의 다른 글
GraphQL 에서 N + 1 을 해결 하기 위해 Dataloader 사용하기 (0) | 2022.08.02 |
---|---|
GraphQL 에서 Resolver 의 역활 (0) | 2022.07.28 |
댓글
이 글 공유하기
다른 글
-
GraphQL 에서 N + 1 을 해결 하기 위해 Dataloader 사용하기
GraphQL 에서 N + 1 을 해결 하기 위해 Dataloader 사용하기
2022.08.02 -
GraphQL 에서 Resolver 의 역활
GraphQL 에서 Resolver 의 역활
2022.07.28