サーブレットのフィルターで特定のサーブレットのみ除く方法
ユーザがログイン済みかどうか確かめる方法として、ログイン時にセッションにユーザ情報を保存して各画面呼び出し時にセッションを確認する。という方法がよく使われる。それを実現するためにJavaでは私はフィルターをよくつかっている。
ただ、ログイン前のサーブレットは除外しなければいけないというケースがたまにあるのでこの場合は以下のように作っている。
まず、web.xmlでフィルターの定義と初期化パラメータとして除外するサーブレット名指定。
SessionFilter SessionFilter ignoreServlet ignore.do Session /*.do
フィルターの初期化処理で除外サーブレット名を取得
public void init(FilterConfig filterConfig) throws ServletException { this.ignoreServlet = filterConfig.getInitParameter("ignoreServlet"); }
フィルター処理でアクセスされたサーブレット名と除外対象のサーブレット名を比較
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // アクセスされたサーブレット名を取得 String servletName = *1 { //セッションチェック処理 } chain.doFilter(request, response); }
これで終わり。除外サーブレットに.doなど拡張子をつけたくない場合は、サーブレット名を比較するときに拡張子まえで比較するなどなんとでも。
除外対象が複数ある場合は、csvで定義するなどなんとでもカスタマイズ可能。
*1:HttpServletRequest) request).getServletPath(); // 除外対象でなければセッションチェック if (!ignoreServlet.equals(servletName