一、过滤器
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
更多可参考(http://blog.csdn.net/king_is_everyone/article/details/53116744)