В url-шаблоне web.xml есть способ исключить URL-адреса?
Я написал фильтр, который нужно вызывать каждый раз, когда URL-адрес моего сайта будет доступен. ЗА ИСКЛЮЧЕНИЕМ файлов CSS, JS и IMAGE. Поэтому в моем определении я хотел бы иметь что-то вроде:
<filter-mapping>
<filter-name>myAuthorizationFilter</filter-name>
<url-pattern>NOT /css && NOT /js && NOT /images</url-pattern>
</filter-mapping>
Есть ли все-таки сделать это? Единственная документация, которую я могу найти, имеет только /*
UPDATE:
В итоге я использовал что-то похожее на ответ, предоставленный 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());
}
Ответы
Ответ 1
Я думаю, вы можете попробовать это:
@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;
}
}
Ответ 2
Отображение шаблона URL не поддерживает исключения. Это ограничение спецификации сервлета. Вы можете попробовать ручное обходное решение, опубликованное Mr.J4mes.
Ответ 3
Возможно, вы могли бы объявить еще один "пустой" фильтр для css
, js
и т.д. и поместить его перед тем, как сопоставить фильтры фильтров.
Ответ 4
Я использовал ограничение безопасности для доступа к управлению. Смотрите код:
<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>
Я следую этому учебнику.