SpringBoot系列過濾器filter和監聽器listener配置
阿新 • • 發佈:2019-02-13
一、過濾器
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