springboot的Interceptor、Filter、Listener及注册
springboot拦截器:
public class Interceptor implements HandlerInterceptor{ private Logger logger = LoggerFactory.getLogger(Interceptor.class); public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub } public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // TODO Auto-generated method stub } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { String flag = null; flag = request.getParameter("auth"); if(StringUtils.isEmpty(flag) || !flag.equals("php")){ /*logger.error("error-auth:{}", flag); response.getWriter().append("error-auth"); return false;*/ } else { logger.info("通过校验!"); return true; } return true; } }
spring boot过滤器:
/* * 如果是一个过滤器,在MyFilter类上加上@WebFilter(filterName = "myFilter",urlPatterns = {"/*"}) ,入口类加上@ServletComponentScan即可 */ public class MyFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println(request.getParameter("name")); HttpServletRequest hrequest = (HttpServletRequest)request; HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response); if(hrequest.getRequestURI().indexOf("/index") != -1 || hrequest.getRequestURI().indexOf("/asd") != -1 || hrequest.getRequestURI().indexOf("/online") != -1 || hrequest.getRequestURI().indexOf("/login") != -1 ) { chain.doFilter(request, response); }else { // wrapper.sendRedirect("/login"); chain.doFilter(request, response); } } @Override public void destroy() { } }
springboot监听器:
/** * @date: 2019/4/1 * @description: ServletRequestListener、 HttpSessionListener 、ServletContextListener ...... * 可直接在MyListener类上使用@WebListener注解,入口类加上@ServletComponentScan即可 */ public class MyListener implements HttpSessionListener { private Logger logger = LoggerFactory.getLogger(this.getClass());//用户this.getClass(), 粘贴不容易出错 public static int online = 0; @Override public void sessionCreated(HttpSessionEvent se) { online ++; logger.info("online在线人数为:" + online); } @Override public void sessionDestroyed(HttpSessionEvent se) { } }
向spring注册拦截器、过滤器、监听器:
@Configuration public class MyWebAppConfigurer implements WebMvcConfigurer { // @Bean /* public HandlerInterceptor getMyInterceptor(){ return new Interceptor(); }*/ /** * 注册拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new Interceptor()).addPathPatterns("/**"); // super.addInterceptors(registry); } /** * 注册监听器 * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean public ServletListenerRegistrationBean listenerRegist() { ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean(); srb.setListener(new MyListener()); System.out.println("listener"); return srb; } /** * 注册过滤器 * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean public FilterRegistrationBean filterRegist() { FilterRegistrationBean frBean = new FilterRegistrationBean(); frBean.setFilter(new MyFilter()); // frBean.setOrder(1);//多个过滤器时指定过滤器的执行顺序 frBean.addUrlPatterns("/*"); System.out.println("filter"); return frBean; } /*@Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/zxc/foo").setViewName("foo"); }*/ }
程序员的眼里,不止有代码和bug,还有诗与远方和妹子!!!