문제

Posthandle () 메소드에 HTTP 헤더를 추가하려는 스프링 인터셉터가 있습니다.

public void postHandle(HttpServletRequest req, HttpServletResponse resp, 
             Object obj1, ModelAndView mv)
        throws Exception {
        response.setHeader("SomeHeaderSet", "set");
        response.addHeader("SomeHeaderAdd", "added");
    }
}

그러나 Setheader () 또는 addheader ()로 헤더가 추가되지 않습니다.

이것은 인터셉터에서 수행하는 데 유효합니까? 나는 그것이 될 것이라고 생각했지만 그것은 작동하지 않습니다.

안부, 더스틴

도움이 되었습니까?

해결책 2

글쎄, 나는 그것을 알아 냈다 ... 좀 ...

Jetty 및 Tomcat과 같은 문제가 나타났습니다 (아마도 컨테이너 문제라고 생각했습니다). 그래서...

스프링이 컨테이너로 다시 돌아올 때까지 응답 객체에 올바른 헤더 값이 포함되어 있는지 확인하기 위해 디버깅되었습니다. 결과 : httpservletresponse 인스턴스는 여전히 올바른 헤더 값을 가졌습니다.

나는 내 코드에서 내가 호출하고있는 것을 발견했다 response.setContentLength() 헤더로 무엇이든하기 전에. 내가 댓글을 달면 모든 것이 잘 작동합니다.

그래서 나머지 미스터리는 왜 response.setContentLength() 물건을 잠그고 헤더를 수정할 수 없습니까? 콘텐츠 본문이 다른 헤더와 관련이 있다고 생각하지 않았습니다.

다른 팁

프리 핸들 방법으로 헤더를 설정해 보셨습니까? 그래도 작동하지 않으면 컨테이너 용 필터를 작성하고 대신 헤더를 거기에 설정하십시오.

비슷한 문제가 있었는데 Web.xml에 다음과 같은 경우 작동합니다 (이유를 알아 내지 못했습니다).

<filter>
  <filter-name>etagFilter</filter-name>
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>etagFilter</filter-name>
  <servlet-name>myServlet</servlet-name>
</filter-mapping>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top