A API Servlet padrão não suporta esse recurso. Você pode usar um filtro de URL de reescrita como o de Tuckey (que é muito semelhante ao HTTPD do Apache mod_rewrite
) ou adicionar uma verificação no doFilter()
método de escuta do filtro /*
.
String path = ((HttpServletRequest) request).getRequestURI();
if (path.startsWith("/specialpath/")) {
chain.doFilter(request, response); // Just continue chain.
} else {
// Do your business stuff here for all paths other than /specialpath.
}
Se necessário, é possível especificar os caminhos a serem ignorados como um init-param
filtro, para que você possa controlá-lo da mesma web.xml
maneira. Você pode obtê-lo no filtro da seguinte maneira:
private String pathToBeIgnored;
public void init(FilterConfig config) {
pathToBeIgnored = config.getInitParameter("pathToBeIgnored");
}
Se o filtro fizer parte da API de terceiros e, portanto, você não puder modificá-lo, mapeie-o de forma mais específica url-pattern
, por exemplo, /otherfilterpath/*
e crie um novo filtro no /*
qual encaminha para o caminho correspondente ao filtro de terceiros.
String path = ((HttpServletRequest) request).getRequestURI();
if (path.startsWith("/specialpath/")) {
chain.doFilter(request, response); // Just continue chain.
} else {
request.getRequestDispatcher("/otherfilterpath" + path).forward(request, response);
}
Para evitar que esse filtro se auto-identifique em um loop infinito, é necessário deixá-lo ouvir (despachar) REQUEST
apenas e o filtro de terceiros FORWARD
somente.
Veja também: