2008-10-29 10 views
3

J'ai un Spring Interceptor qui tente d'ajouter un en-tête HTTP dans la méthode postHandle().Ajout d'en-têtes HTTP dans une méthode Spring Interceptor postHandle

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

Cependant, ni en-tête est ajouté soit setHeader() ou addHeader(). Est-ce que cela est même valable dans l'intercepteur? Je pensais que ce serait, mais ça ne marche pas.

Cordialement, Dustin

Répondre

1

Eh bien, je me suis dit dehors ... Kinda ...

fin de compte, même problème avec la jetée et Tomcat (compris peut-être était un problème de conteneur). Donc ...

Débogué pour s'assurer que l'objet de réponse contenait la valeur d'en-tête correcte jusqu'à ce que Spring revienne dans le conteneur. Résultat: L'instance HttpServletResponse avait toujours la valeur d'en-tête correcte.

J'ai trouvé dans mon code que j'appelais response.setContentLength() AVANT de faire quoi que ce soit avec les en-têtes. Si je commente, tout fonctionne bien. Donc, le mystère qui reste est, pourquoi appeler response.setContentLength() verrouille les choses et ne permet pas de modifier les en-têtes? Je ne pensais pas que le corps du contenu avait quelque chose à voir avec les autres en-têtes.

1

Avez-vous essayé de placer les en-têtes dans la méthode preHandle? Si cela ne fonctionne pas, essayez d'écrire un filtre pour le conteneur et placez les en-têtes à la place.

+1

Eh bien, je ne peux pas le faire dans la méthode preHandle parce que la L'en-tête que je dois définir est basé sur les résultats du traitement de la servlet, donc cela doit être fait dans la méthode postHandle. – DustinB

0

J'ai eu un problème similaire, il fonctionne quand je suit dans le web.xml (n'ont pas compris pourquoi)

<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>