-
Demande d'amélioration
-
Résolution: Résolu
-
Mineur
-
trunk
-
Aucune
-
Aucune
Bug constaté
Sur les environnement où Tomcat est derrière Apache, et que la directive suivante n'est pas déclarée (car mauvaise pratique) :
JkMount /* uas
Le paramètre "URL_DEMANDEE" n'était pas transmis aux pages d'erreurs (404, 503, …)
Solution proposée
1. Configuration Apache a corriger
Avant les déclarations JkMount, ajouter ces lignes :
JkEnvVar REDIRECT_URL JkEnvVar REDIRECT_QUERY_STRING
Sans ces lignes, ces paramètres ne seront pas transférés à Tomcat, et il sera impossible d'obtenir l'URL demandée.
2. Création du Filter
Afin de ne pas toucher à ErrorServlet, un filter a été créé pour alimenter les paramètres auparavant vides :
package fr.kosmos.psk.filter; import com.kportal.filter.ExtensionFilter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(filterName="errorFilter", urlPatterns = "/servlet/com.kportal.core.ErrorServlet") public class ErrorFilter implements ExtensionFilter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { Object requestURI = servletRequest.getAttribute("javax.servlet.forward.request_uri"); if (requestURI == null) { requestURI = servletRequest.getAttribute("REDIRECT_URL"); servletRequest.setAttribute("javax.servlet.forward.request_uri", requestURI); } Object queryString = servletRequest.getAttribute("javax.servlet.forward.query_string"); if (queryString == null) { queryString = servletRequest.getAttribute("REDIRECT_QUERY_STRING"); servletRequest.setAttribute("javax.servlet.forward.query_string", queryString); } filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() {} }
3. (facultatif) Déclarer le package
Dans le cadre du PSK, ce filtre a été ajouté au niveau du projet en attendant la correction. Il a donc fallu ajouter le package de ce filtre au "classBeanManager".
Ajouter ce bean dans nom_projetExtensionContext.xml :
<!-- Ajout des packages projet dans lesquels doivent être recherchés des classes chargées dynamiquement (Recherche, Servlet...) --> <bean id="classBeanManagerAdd" class="com.kportal.core.context.ListToAddBean"> <property name="idBeanToMerge" value="classBeanManager" /> <property name="listToMerge" value="packages" /> <property name="add"> <list> <value>fr.kosmos.psk</value> </list> </property> </bean>
- mentioned in
-
Page Chargement