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());
}
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;
}
}
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.
Vous pourriez probablement déclarer un autre filtre "vide" pour css
, js
etc, et le placer avant les autres mappages de filtres.
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.