CSS、JS、およびIMAGEファイルを除いて、サイトのURLにアクセスするたびに呼び出す必要があるフィルターを作成しました。だから私の定義では次のようなものが欲しいです:
<filter-mapping>
<filter-name>myAuthorizationFilter</filter-name>
<url-pattern>NOT /css && NOT /js && NOT /images</url-pattern>
</filter-mapping>
とにかくこれを行うにはありますか?私が見つけることができる唯一のドキュメントは/ *しかありません
更新:
私は、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());
}
私はあなたがこれを試すことができると思います:
@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;
}
}
URLパターンマッピングは除外をサポートしていません。これはサーブレット仕様の制限です。 Mr.J4mesによって投稿された手動の回避策を試すことができます。
おそらく、css
、js
などに対して別の「空白」フィルターを宣言し、他のフィルターマッピングの前に置くことができます。
アクセス制御にセキュリティ制約を使用しました。コードを参照してください:
<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>
私は this チュートリアルに従います。