Image du projet 'Socle K-Sup' téléversée
  1. Socle K-Sup
  2. CORE-1760

Correction pages d'erreurs : URL non transmise

XMLWordImprimable

    • Icon: Demande d'amélioration Demande d'amélioration
    • Résolution: Résolu
    • Icon: Mineur Mineur
    • 6.06.00-BETA-01
    • 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>
      

            christopher.machicoane-hurtaud Christopher MACHICOANE-HURTAUD [X] (Inactif)
            christopher.machicoane-hurtaud Christopher MACHICOANE-HURTAUD [X] (Inactif)
            Votes:
            1 Voter pour ce ticket
            Gérer les observateurs:
            3 Démarre l'observation de ce ticket

              Création:
              Mise à jour:
              Résolue: