JSP/Servlet のリクエスト、レスポンスにヘッダ設定など共通的な処理を入れたいときがある
その際に javax.servlet.Filter
を implements
したクラスを作ることで前後処理をできるのでその簡易的な例です
Filter の実態を作る(これだけでOK)
-
Filter
をimplements
したクラスを作る -
@WebFilter
のurlPatterns
に前後処理を入れたいパスを設定(/*
で全部のパスが対象) -
doFilter
メソッドに前後処理を記載する,chain.doFilter
で Servlet や他の Filter を処理する
SampleFilter
package presentation.servlet; //ここは環境に応じたパッケージでOK
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;
import javax.servlet.http.HttpServletResponse;
/**
* {@link SampleFilter}
*/
@WebFilter(urlPatterns = "/*")
public class SampleFilter implements Filter {
/**
* {@inheritDoc}
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 前処理
System.out.println("before servlet");
// Servlet, 他のFilter 処理
chain.doFilter(request, response);
// 後処理
System.out.println("after servlet");
}
/**
* {@inheritDoc}
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// フィルタ生成時の共通処理
}
/**
* {@inheritDoc}
*/
@Override
public void destroy() {
// フィルタ破棄時の共通処理
}
}
ヘッダ設定の例
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Access-Control-Allow-Origin", "https://xxx.yyy.zzz.com");
chain.doFilter(request, response);
}