1. 程式人生 > >SpringBoot系列過濾器filter和監聽器listener配置

SpringBoot系列過濾器filter和監聽器listener配置

一、過濾器

1、新建過濾器類實現Filter介面

package com.jd.m.tg.filter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import java.io.IOException;

@Component
public class MyFilter implements Filter {

    private static final Logger LOG= LoggerFactory.getLogger(MyFilter.class);

    @Override
public void init(FilterConfig filterConfig) throws ServletException { LOG.info("初始化過濾器"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { LOG.info("過濾器處理規則"
); filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { LOG.info("銷燬過濾器"); } }

2、filter配置

SpringBoot的filter配置有兩種方式,一種是@Webfilter註解方式,一種是FilterRegistrationBean配置類,推薦第二種方式,因為註解的底層也是通過第二種方式實現的,對於多個過濾器的執行順序也好設定;order值越小,表示越優先執行;
package com
.jd.m.tg.config; import com.jd.m.tg.filter.MyFilter; import com.jd.m.tg.filter.MyFilterTwo; import lombok.AllArgsConstructor; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @AllArgsConstructor public class FilterConfig { private MyFilter myFilter; private MyFilterTwo myFilterTwo; @Bean public FilterRegistrationBean myFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(myFilter); registration.addUrlPatterns("/*"); registration.setName("myFilter"); registration.setOrder(10); return registration; } @Bean public FilterRegistrationBean myTwoFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(myFilterTwo); registration.addUrlPatterns("/*"); registration.setName("myFilterTwo"); registration.setOrder(1); return registration; } }

注:filter、listener、servlet都需要在啟動類上加上註解@ServletComponentScan

二、監聽器配置

1、新建監聽器(只列舉一種監聽器實現方式,有很多種監聽器)

package com.jd.m.tg.listener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


@Component
public class MyListener implements ServletContextListener {

    private static final Logger LOG= LoggerFactory.getLogger(MyListener.class);

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        LOG.info("ServletContextListener監聽器初始化");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        LOG.info("ServletContextListener監聽器銷燬");
    }
}

2、監聽器配置

可以在監聽器類上加@WebListener實現配置,但ServletListenerRegistrationBean實現配置更好,原理同上,看習慣;
package com.jd.m.tg.config;

import com.jd.m.tg.listener.MyListener;
import com.jd.m.tg.listener.MyListenerTwo;
import lombok.AllArgsConstructor;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@AllArgsConstructor
public class ListenerConfig {

    private MyListener myListener;
    private MyListenerTwo myListenerTwo;

    @Bean
    public ServletListenerRegistrationBean myFilterTwoConfig(){
        ServletListenerRegistrationBean<MyListenerTwo> servletListenerRegistrationBean = new ServletListenerRegistrationBean<>();
        servletListenerRegistrationBean.setListener(myListenerTwo);
        return servletListenerRegistrationBean;
    }

    @Bean
    public ServletListenerRegistrationBean myListenerConfig(){
        ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean = new ServletListenerRegistrationBean<>();
        servletListenerRegistrationBean.setListener(myListener);
        return servletListenerRegistrationBean;
    }
}

注:監聽器配置類中對應監聽器的配置物件的建立順序就是執行順序;

注:filter、listener、servlet都需要在啟動類上加上註解@ServletComponentScan