filter에서 request값을 빼와 log에도 찍고 MDC에도 넣고.. 다양하게 활용하고 싶었다.
만약 필요한 값이 header에 있는 값이라면?
HttpServletRequest.getHeader("header name") 을 사용하여 해결할 수 있다.
그런데 header에 없는 값이라면?
HttpServletRequest.getParameter("key name") 을 사용했더니 request로 들어오는 값을 가져올 수 있었다.
이렇게 해서 순조롭게 쓰다가 계속 여러 엔드포인트들에서 null이 찍혀 찾아보았더니 이것은 GET방식에서만 가능하고 POST방식에선..... null로 들어오는 것을 알게 되었다 바보다..🤦♀️
POST는 json 형태기 때문에 json은 inputStream으로 read해서 가져온다. 이렇게 inputStream으로 가져오면 원하는 request값을 첫 시점에서 사용할 수 있다.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
ContentCachingRequestWrapper cachingRequestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) request);
ContentCachingResponseWrapper cachingResponseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response);
InputStream contentInputStream = cachingRequestWrapper.getInputStream();
String requestBody = StreamUtils.copyToString(contentInputStream, StandardCharsets.UTF_8);
Map<String,String> map = new ObjectMapper().readValue(requestBody, Map.class);
//request에서 특정 값 사용하기
String value = map.get("name");
}
이렇게 하면 value를 사용하여 필요한 곳에 쓸 수 있다.
'TIL' 카테고리의 다른 글
[TIL] git flow - hotfix branch 를 main에 merge한 이후에? (0) | 2023.06.22 |
---|---|
[TIL] 버퍼를 읽는 것이란 무엇일까...?... Wrapper class를 써보았다. (0) | 2023.06.20 |
[TIL] logback 설정 어렵다 (1) | 2023.06.18 |
[TIL] pinpoint를 통해 들어오는 요청들을 확인해보았다. (0) | 2023.06.02 |
[TIL] try-catch-resource 와 AutoClosable (0) | 2023.05.31 |