[GraphQL] Header 활용하기

신명철·2023년 2월 14일
0

GraphQL

목록 보기
3/3

GraphQL은 헤더를 활용할 수 있다
만약 GraphQL에 헤더를 넣고 활용하고 싶다면 Inteceptor를 활용하면 된다

Request Header

@Component
public class RequestHeaderInterceptor implements WebGraphQlInterceptor {
    @Override
    public Mono<WebGraphQlResponse> intercept(WebGraphQlRequest request, Chain chain) {
        String value = request.getHeaders().getFirst("AUTH");
        request.configureExecutionInput((executionInput, builder) ->
            builder.graphQLContext(Collections.singletonMap("AUTH", value)).build());
        return chain.next(request);
    }
}
@Controller
@RequiredArgsConstructor
public class RestController {
	@QueryMapping
    public Member getMember(@Argument Long id, GraphQLContext context){
        System.out.println("header :: " + context.get("AUTH"));
        return memberRepository.findById(id).get();
    }
}

2023-02-14 21:56:46.461  INFO 11760 --- [nio-8080-exec-5] g.graphql.controller.RestController      : header :: TOKE

WebGraphQlInterceptor 를 사용해서 WebGraphQlRequest에 있는 header를 GraphQLContext에 넣어서 이를 컨트롤러에서 사용하는 방식이다.

Response Header

@Component
public class ResponseHeaderInterceptor implements WebGraphQlInterceptor {

    @Override
    public Mono<WebGraphQlResponse> intercept(WebGraphQlRequest request, Chain chain) {
        return chain.next(request).doOnNext(response -> {
            String value = response.getExecutionInput().getGraphQLContext().get("token");
            ResponseCookie cookie = ResponseCookie.from("token", value).build();
            response.getResponseHeaders().add(HttpHeaders.SET_COOKIE, cookie.toString());
        });
    }
}
@Slf4j
@Controller
@RequiredArgsConstructor
public class RestController {
	@QueryMapping
    public Member getMember(@Argument Long id, GraphQLContext context){
        context.put("token", "test");
        return memberRepository.findById(id).get();
    }
}

마찬가지로 header에 값을 담아서 응답하고 싶다면 WebGraphQlInterceptor를 활용해서 값을 담을 수 있다


참고

profile
내 머릿속 지우개

0개의 댓글