This article mainly introduces SpringBoot's method of defining filters, listeners, and interceptors. It has certain reference value. Those who are interested can learn more.
1. Custom filter
Create a filter, implement the javax.servlet.Filter interface, and rewrite the init, doFilter, destroy methods.
package com.example.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * 实现javax.servlet.Filter,覆盖其三个方法 * @author Administrator * */ @WebFilter(filterName="customFilter",urlPatterns="/*") public class CustomFilter implements Filter{ @Override public void destroy() { System.out.println("CustomFilter过滤器销毁"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("CustomFilter指定过滤器操作......"); //执行操作后必须doFilter chain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("CustomFilter初始化......"); } }
2. Custom listener
Create a filter and implement the ServletContextListener interface
package com.example.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; /** * 实现ServletContextListener,覆盖其两个方法 * @author Administrator * */ @WebListener public class CustomListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent servletContext) { System.out.println("servletContext销毁......"); } @Override public void contextInitialized(ServletContextEvent servletContext) { System.out.println("servletContext初始化......"); } }
Create asessionListener, monitors the creation and destruction of session
package com.example.listener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * 实现HttpSessionListener接口,监视session的动态 * @author Administrator * */ @WebListener public class SessionListener implements HttpSessionListener{ @Override public void sessionCreated(HttpSessionEvent session) { System.out.println("session创建成功......"); } @Override public void sessionDestroyed(HttpSessionEvent session) { System.out.println("session销毁......"); } }
3. Custom interceptor
Steps:
1. Create your own interceptor to implement the HandlerInterceptor interface
2. Create your own interceptor chain, inherit the WebMvcConfigurerAdapter class, and override the addInterceptors method.
3. Instantiate your own interceptor and add it to the interceptor chain.
Interceptor one:
package com.example.Interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class CustomInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) System.out.println("3. 整个请求结束之后被调用......CustomInterceptor1......"); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view) throws Exception { // 请求处理之后进行调用,但是在视图被渲染之前 System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor1......"); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { // 在请求处理之前进行调用 System.out.println("1. 在请求处理之前进行调用......CustomInterceptor1......"); // 只有返回true才会继续向下执行,返回false取消当前请求 return true; } }
Interceptor two:
package com.example.Interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class CustomInterceptor2 implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) System.out.println("3. 整个请求结束之后被调用......CustomInterceptor2......"); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view) throws Exception { // 请求处理之后进行调用,但是在视图被渲染之前 System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor2......"); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { // 在请求处理之前进行调用 System.out.println("1. 在请求处理之前进行调用......CustomInterceptor2......"); // 只有返回true才会继续向下执行,返回false取消当前请求 return true; } }
Customize the interceptor chain and add the custom interceptor
package com.example.adapter; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.example.Interceptor.CustomInterceptor; import com.example.Interceptor.CustomInterceptor2; /** * 继承WebMvcConfigurerAdapter,复写addInterceptors方法 * @author Administrator * */ @Configuration public class WebAdapter extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry) { //众多的拦截器组成了一个拦截器链 /** * 主要方法说明: * addPathPatterns 用于添加拦截规则 * excludePathPatterns 用户排除拦截 */ registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/*"); registry.addInterceptor(new CustomInterceptor2()).addPathPatterns("/*"); super.addInterceptors(registry); } }
The above is the detailed content of Introduction to methods of implementing filters, listeners, and interceptors through SpringBoot in java. For more information, please follow other related articles on the PHP Chinese website!