Ajout d'en-têtes HTTP dans une méthode postHandle de Spring Interceptor

StackOverflow https://stackoverflow.com/questions/246762

  •  05-07-2019
  •  | 
  •  

Question

J'ai un intercepteur de ressort qui tente d'ajouter un en-tête HTTP dans la méthode postHandle ().

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

Toutefois, aucun en-tête n'est ajouté avec setHeader () ou addHeader ().

Est-ce même valable pour faire dans l'intercepteur? Je pensais que ce serait, mais ça ne marche pas.

Cordialement, Dustin

Était-ce utile?

La solution 2

Eh bien, je l'ai compris ... Un peu ...

Il s’avère que le même problème se pose avec Jetty et Tomcat (pensa peut-être que c’était un problème de conteneur). Alors ...

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

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 va bien.

Le mystère restant est donc: pourquoi l'appel de response.setContentLength () verrouille-t-il les choses et n'autorise-t-il pas la modification d'en-têtes? Je pensais que le corps du contenu n'avait rien à voir avec les autres en-têtes.

Autres conseils

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

J'ai eu un problème similaire, cela fonctionne lorsque j'ai les éléments suivants dans le fichier web.xml (je n'ai 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top