2012-11-13 2 views
1

Je suis en train de programmer un Servlet-Filter, qui encapsule la réponse et analyse les appels à addHeader() de la réponse encapsulée. Avant que la réponse ne soit validée par le client, elle la décore avec des en-têtes utiles (mise en cache, compression, etc.), le cas échéant.Détecter les appels à RequestDispatcher.include()

Cette décoration est effectuée lorsque ServletResponse.flushBuffer() est appelée sur la réponse encapsulée ou lorsque la taille de la mémoire tampon est atteinte. Mais si le Servlet enveloppé (ou JSP-Page) traite un include à ce moment, aucun en-tête ne peut être ajouté à la réponse, car une inclusion est interdite.

Par conséquent, j'ai besoin de détecter comprend, de sorte que je suis capable, de décorer la réponse avant que la ressource est incluse. La seule manière, je peux penser, pour accomplir cela est, pour emballer la demande, attraper des appels à ServletRequest.getRequestDispatcher() et renvoyer une instance enveloppée de RequestDispatcher, qui m'informe, quand elle est include-method est appelée . Mais depuis Servlet 3.0 il y a aussi les méthodes ServletContext.getRequestDispatcher() et ServletContext.getNamedDispatcher(). Je ne peux pas attraper ces méthodes, car mon filtre ne peut pas envelopper le ServletContext.

Existe-t-il un autre moyen de détecter les appels à RequestDispatcher.include()?

Répondre

1

ajouter

<dispatcher>INCLUDE</dispatcher> 

pour filter-mapping semble fonctionner refer

+0

Oui, moi aussi je suis tombé accross cette possibilité aujourd'hui. Mais je ne suis pas sûr, si cela aide, car dans ce cas le filtre est appelé, quand l'include est déjà en cours et, par conséquent, le conteneur peut déjà ignorer les appels à ServletResponse.addHeader(), comme demandé dans la spécification. Je vais essayer de le faire et faire un rapport, si ça peut aider! –

+0

Je l'ai essayé. Comme prévu, je ne peux pas ajouter d'en-têtes à partir d'un filtre, qui a été mappé avec ' INCLUDE', car un include ne peut pas modifier les en-têtes de la réponse ... –

Questions connexes