Adicionando cabeçalhos HTTP num método mola interceptor postHandle
-
05-07-2019 - |
Pergunta
Eu tenho um Interceptor Primavera que tenta adicionar um cabeçalho HTTP no método postHandle ().
public void postHandle(HttpServletRequest req, HttpServletResponse resp,
Object obj1, ModelAndView mv)
throws Exception {
response.setHeader("SomeHeaderSet", "set");
response.addHeader("SomeHeaderAdd", "added");
}
}
No entanto, nem o cabeçalho é adicionado com qualquer setHeader () ou addHeader ().
Isto é ainda válida para fazer no interceptor? Eu imaginei que seria, mas ele não está trabalhando.
Saudações, Dustin
Solução 2
Bem, eu percebi isso ... meio ...
Acontece que, mesmo problema com Jetty e Tomcat (figurado talvez fosse uma questão container). Então ...
Debugged para assegurar que o objeto de resposta continha o valor correto de cabeçalho-se até à Primavera devolvido para o recipiente. Resultado:. A instância HttpServletResponse ainda tinha o valor de cabeçalho correta ??p>
Eu encontrei no meu código eu estava invocando response.setContentLength()
antes de eu fazer qualquer coisa com os cabeçalhos. Se eu comentá-lo, tudo funciona bem.
Assim, o mistério restante é, por que chamar as coisas bloqueio response.setContentLength()
para baixo e não permitir que quaisquer cabeçalhos de ser modificado? Eu não acho que o corpo de conteúdo tinha nada a ver com os outros cabeçalhos.
Outras dicas
Você já tentou definir os cabeçalhos no método preHandle? Se isso não funcionar, tente escrever um filtro para o recipiente e definir os cabeçalhos em lá em vez disso.
Eu tive um problema semelhante, ele funciona quando eu tenho o seguinte no web.xml (ainda não descobri por quê)
<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>