LoginSignup
18
21

More than 5 years have passed since last update.

Servlet3.0でFilterの順序を指定する

Last updated at Posted at 2014-05-26

@WebFilter アノテーションで Filter を定義できるようになったけど、順番は指定できない。残念です。

順番を指定したい場合は web.xml に記述する。
ただし、 @WebFilterfilterNameurlPatterns を指定していれば、 url-pattern タグは内容を省略可能。

HogeFilter.java
package sample.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter(filterName="hoge-filter", urlPatterns="/hoge")
public class HogeFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
    }

    @Override public void init(FilterConfig filterConfig) throws ServletException {}
    @Override public void destroy() {}

}
FugaFilter.java
package sample.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter(filterName="fuga-filter", urlPatterns="/fuga")
public class FugaFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
    }

    @Override public void init(FilterConfig filterConfig) throws ServletException {}
    @Override public void destroy() {}

}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

  <filter-mapping>
    <filter-name>hoge-filter</filter-name>
    <url-pattern />
  </filter-mapping>

  <filter-mapping>
    <filter-name>fuga-filter</filter-name>
    <url-pattern />
  </filter-mapping>
</web-app>

url-pattern タグを完全に消してしまうと XML のスキーマ定義に違反してしまうので、タグだけ書く必要がある。

参考

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21