web-dev-qa-db-fra.com

Dans un comparateur de modèle d'URL web.xml, existe-t-il un moyen d'exclure des URL?

J'ai écrit un filtre qui doit être invoqué chaque fois qu'une URL sur mon site est consultée SAUF les fichiers CSS, JS et IMAGE. Donc, dans ma définition, j'aimerais avoir quelque chose comme:

<filter-mapping>
   <filter-name>myAuthorizationFilter</filter-name>
   <url-pattern>NOT /css && NOT /js && NOT /images</url-pattern>
</filter-mapping>

Y a-t-il un moyen de faire ça? La seule documentation que je puisse trouver n'a que/*

MISE À JOUR:

J'ai fini par utiliser quelque chose de similaire à une réponse fournie par Mr.J4mes:

   private static Pattern excludeUrls = Pattern.compile("^.*/(css|js|images)/.*$", Pattern.CASE_INSENSITIVE);
   private boolean isWorthyRequest(HttpServletRequest request) {
       String url = request.getRequestURI().toString();
       Matcher m = excludeUrls.matcher(url);

       return (!m.matches());
   }
22
kasdega

Je pense que vous pouvez essayer celui-ci:

@WebFilter(filterName = "myFilter", urlPatterns = {"*.xhtml"})
public class MyFilter implements Filter {

   @Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
      String path = ((HttpServletRequest) request).getServletPath();

      if (excludeFromFilter(path)) chain.doFilter(request, response);
      else // do something
   }

   private boolean excludeFromFilter(String path) {
      if (path.startsWith("/javax.faces.resource")) return true; // add more page to exclude here
      else return false;
   }
}
21
Mr.J4mes

Le mappage de modèle d'URL ne prend pas en charge les exclusions. Il s'agit d'une limitation de la spécification Servlet. Vous pouvez essayer la solution de contournement manuelle publiée par Mr.J4mes.

5
Perception

Vous pourriez probablement déclarer un autre filtre "vide" pour css, js etc, et le placer avant les autres mappages de filtres.

1
IProblemFactory

J'ai utilisé la contrainte de sécurité pour contrôler l'accès. Voir le code:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Unsecured resources</web-resource-name>
        <url-pattern>/resources/*</url-pattern>
        <url-pattern>/javax.faces.resource/*</url-pattern>
    </web-resource-collection>
</security-constraint>

Je suis ce tutoriel.

0
Wendel