2014-06-09 3 views
3

나는이 문제에 대한 게시물을 몇 개 보았지만 그 대답을 찾지 못했습니다.doFilter 다음에 응답 헤더 추가하기

내가하고 싶은 것은 필터 체인 후 헤더를 추가입니다

,

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
HttpServletResponse httpResp = (HttpServletResponse) response; 

try { 
HttpServletResponseWrapper bufferedResponse = new  HttpServletResponseWrapper (httpResp); 

chain.doFilter(request, bufferedResponse); 

} finally { 
// header added at this line is not actually being added.   
bufferedResponse.setHeader("ADD A HEADER: ", "HEADER"); 
}          
} 

여러 게시물 HttpServletResponseWrapper를 사용하여 가능하다 말을하지만 나를 위해 작동하지 않는 사람이 나를 도울 수있다.

답변

4

HTTP 헤더가 모두 클라이언트에 기록 되었기 때문에 응답을 커밋 한 후에는 헤더를 추가 할 수 없습니다 (실제로는 가능하지만 효과는 없습니다).

세 가지 옵션이 있습니다. 당신이 시도하고 헤더를 추가하기 전에 응답이 최선을 다하고 있지 않은지

  1. 당신이 doFilter를 호출하기 전에 헤더 쓰기()
  2. 가 있는지 확인합니다 (어떤 통화가 플러시 없습니다 큰 버퍼, 작은 응답() 등).
  3. do 필터 메서드 앞에 응답을 래핑 한 다음 래퍼에 전체 응답 본문을 버퍼링하고 나중에 헤더를 추가 한 다음 버퍼에서 응답 본문을 작성합니다.
+0

예, 제안한 옵션 2 또는 3을 구현하려고합니다. 그러나 아직 성공하지 못했습니다. 이를위한 샘플 코드가 있습니까? [link] http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431 [link] 다음과 같은 방법으로 응답을 버퍼링합니다. 나는 응답 헤더를 사용하고 있지만 헤더를 추가하는 방법에 어려움을 겪고있다. – Kishore