2012-11-06 2 views
1

페이지 내용을 기준으로이 헤더를 수정해야합니다.이미 설정된 경우 http 헤더를 수정하는 방법은 무엇입니까?

예 : 이것은 요청 된 이후 까다로운 사례입니다. 특정 헤더의 세부 사항에 들어갈 수 없다. 서블릿/페이지는 어떤 백엔드 시스템이 액세스되었는지에 따라 header specialheader = xyz를 설정한다. 이 특수 헤더가 설정된 경우 필터는 xyz + abc로 수정합니다. 헤더가 설정되어 있지 않으면 필터는 123으로 설정합니다.

필터를 사용하여 포장 된 HttpServletResponse을 만들고 그 길을 뒤로 수정할 수 있습니다. 그러나, 나는 세부 사항에 퍼지다.

필터가 작업을 수행하기 전에 출력이 클라이언트로 다시 보내지지 않도록해야한다는 것을 알고 있습니다. 이렇게하려면 내 자신의 OutputStream을 전달하고 출력을 버퍼링해야합니까?

정말 그렇게해야합니까? 서버에 부하가 걸릴 수있는 출력 버퍼링을 피할 수 있습니까?

기본 질문은 doFilter 호출 후 헤더를 수정해야하는 경우 무엇을해야합니까? overriuciding flush 등과 같이 출력이 커밋되지 않도록하는 다른 방법이 있습니까?

+0

'페이지 내용에 따라이 헤더를 수정 하시겠습니까?'라는 구체적인 예를 제공 할 수 있습니까? – Vikdor

답변

1

폐기하려는 헤더를 무시하기 위해 getHeader와 getHeaderNames를 구현하기 만하면 Wrapper를 필터로 설정할 수 있습니다.

import java.io.ByteArrayOutputStream; 
import java.io.PrintWriter; 
import java.util.Collection; 

import javax.servlet.ServletOutputStream; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpServletResponseWrapper; 

public class GenericResponseWrapper extends HttpServletResponseWrapper { 



    public GenericResponseWrapper(final HttpServletResponse response) { 
     super(response);  
    } 

    @Override 
    public String getHeader(String name) { 
     // TODO Auto-generated method stub 
     return super.getHeader(name); 
    } 
    @Override 
    public Collection<String> getHeaderNames() { 
     // TODO Auto-generated method stub 
     return super.getHeaderNames(); 
    } 
} 


public class Wrapper implements Filter { 

    @Override 
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { 
     final HttpServletRequest httpRequest = (HttpServletRequest) request; 
     final HttpServletResponse httpResponse = (HttpServletResponse) response; 
      final GenericResponseWrapper wrapper = new GenericResponseWrapper(httpResponse); 
      wrapper.getResponse().setCharacterEncoding("UTF-8"); 

      chain.doFilter(request, wrapper); 
} 
} 
관련 문제