1. 程式人生 > >SpringBoot之過濾器配置和應用

SpringBoot之過濾器配置和應用

一、建立過濾器

單獨建立一個filter的類繼承Filter介面,重寫接口裡面的init()、doFilter()、destory()方法即可。

public class LoginFilter implements Filter {

    private static Logger logger = LoggerFactory.getLogger(LoginFilter.class);


    private FilterConfig config;

    @Override
    public void init(FilterConfig filterConfig) {
        this.config =filterConfig;
        logger.info("--------------------init----------------------");

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        logger.info("--------------------doFilter----------------------");
        ServletContext context = this.config.getServletContext();
        long before = System.currentTimeMillis();
        context.log("開始過濾...");
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        context.log("Filter已經攔截使用者請求地址:"+httpServletRequest.getServletPath());
        filterChain.doFilter(servletRequest, servletResponse);
        //---------下面程式碼用於對伺服器響應執行後處理---------
        long after = System.currentTimeMillis();
        //記錄日誌
        context.log("過濾結束");
        //再次記錄日誌
        context.log("請求被定位到" + httpServletRequest.getRequestURI() + "所花的時間為: " + (after - before));
    }

    @Override
    public void destroy() {
        this.config = null;
        logger.info("--------------------destroy----------------------");
    }
}

二、配置過濾器

配置過濾器有兩種方法:1、通過在上面建立的類上添加註解的方式進行配置;2、通過在springboot的啟動類中通過@bean進行註解配置。我主要使用的是第一種。第一種在配置完後需要在啟動類新增@ServletComponentScan註解使springboot幫助我們找到配置好的過濾器

@Order(1)  //過濾器優先順序
@WebFilter(urlPatterns = "/*",filterName = "LoginFilter")
public class LoginFilter implements Filter {
}

@SpringBootApplication
@ServletComponentScan  //註解讓SpringBoot幫助我們掃到Filter
public class PkApplication {

    public static void main(String[] args) {
        SpringApplication.run(PkApplication.class, args);
    }
}

三、結束語

現在執行springboot就可通過日誌列印觀察到過濾器的生命週期,需要通過過濾器完成相應需求的小夥伴們,將方法寫到過濾器的doFilter()方法中即可。