:任意の正規表現パターンを(申し訳ありませんが、春のOncePerRequestFilterの親クラスを使用しています)を使用することができ
<filter>
<filter-name>SampleFilter</filter-name>
<filter-class>org.test.SampleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SampleFilter</filter-name>
<servlet-name>SampleServlet</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>SampleServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
基本フィルタの実装基本的なサーブレットフィルタ機能のみを使用します。サーブレットの仕様は、urlの効率的なマッチングを可能にする方法と、サーブレットがjava(正規表現がJava 1.4に到着した)での正規表現の有効性よりも前に記述されているため記述されている可能性があります。
正規表現は、おそらく(いいえ、私はそれをベンチマークしていない)あまりパフォーマンスのだろうが、あなたを強く処理時間によって制約や構成を容易にするためにパフォーマンスをトレードしたいされていない場合は、このようにそれを行うことができます。
をあなたのフィルタでは
:web.xmlのその後
private String subPathFilter = ".*";
private Pattern pattern;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String subPathFilter = filterConfig.getInitParameter("subPathFilter");
if (subPathFilter != null) {
this.subPathFilter = subPathFilter;
}
pattern = Pattern.compile(this.subPathFilter);
}
public static String getFullURL(HttpServletRequest request) {
// Implement this if you want to match query parameters, otherwise
// servletRequest.getRequestURI() or servletRequest.getRequestURL
// should be good enough. Also you may want to handle URL decoding here.
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
Matcher m = pattern.matcher(getFullURL((HttpServletRequest) servletRequest));
if (m.matches()) {
// filter stuff here.
}
}
...
<filter>
<filter-name>MyFiltersName</filter-name>
<filter-class>com.konadsc.servlet.MyFilter</filter-class>
<init-param>
<param-name>subPathFilter</param-name>
<param-value>/org/test/[^/]+/keys/.*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFiltersName</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
doFilter()
のif文を反転することでパターンを一致させないようにするのが便利な場合もあります(または、除外パターンの別のinitパラメータを追加してください)。
出典
2014-04-11 13:38:16
Gus
私の知る限り、特定のフォルダの内容( 'path/to/my/folder/*')または特定の拡張子( '* .do')のみをurlパターンで使用することができます。 – bdares
[この質問](http://stackoverflow.com/q/26732/922954)の回答を参照してください。 – aishwarya