end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

spring boot for java におけるフィルタ処理(requestに対する前処理)には OncePerRequestFilter

つまりログインフィルタ等は、次のように書くみたい

package jp.end0tknr.streamdoc.ctrl;

import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

@Component
 public class LoginFilter extends OncePerRequestFilter {
    private static final Logger logger =
            LoggerFactory.getLogger(LoginFilter.class);

    @Override
    protected void initFilterBean() throws ServletException {
        // アプリ起動時に呼び出される。
    }

    @Override
    protected void doFilterInternal(
            HttpServletRequest request,
            HttpServletResponse response, 
            FilterChain filterChain)
                    throws ServletException, IOException {
        logger.info("start doFilterInternal()");
        // request時の前処理.
        // 後続処理を行いたくない場合、ここでreturn

        // 後続処理(Servlet 等)、つまりコントローラを呼びます
        filterChain.doFilter(request, response);

        // request時に対する処理後の後処理.
        logger.info("done doFilterInternal()");
    }

    @Override
    public void destroy() {
        // アプリ終了時に呼び出される
    }
}