一、自定义过滤器
创建一个过滤器,实现javax.servlet.Filter接口,并重写其中的init、doFilter、destory方法。
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初始化......"); } }
二、自定义监听器
创建一个过滤器,实现ServletContextListener接口
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初始化......"); } }
创建一个session监听器,监听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销毁......"); } }
三、自定义拦截器
步骤:
1、创建自己的拦截器实现HandlerInterceptor接口
2、创建自己的拦截器链,继承WebMvcConfigurerAdapter类,重写addInterceptors方法。
3、实例化自己的拦截器,并加入到拦截器链中。
拦截器一:
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; } }
拦截器二:
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; } }
自定义拦截器链并加入自定义的拦截器
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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
主要内容:1.maven仓库,2.过滤器,3.拦截器,4.监听器,5.实例化,6.测试,7.拦截器与过滤器的区别1.maven仓库 2.过滤器 过滤器的英文名称为 Filter, 是 Servlet 技术中最实用的技术。 如同它的名字一样,过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请求,通常用作 Session 校验,判断用户权限,如果不符合设定条件,则会被拦截到特殊的地址或者基于特殊的响应。 3.拦截器 Java中的拦截器是动态拦截 action 调用的
本文向大家介绍浅析JAVA中过滤器、监听器、拦截器的区别,包括了浅析JAVA中过滤器、监听器、拦截器的区别的使用技巧和注意事项,需要的朋友参考一下 1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login
在遇到使用springboot拦截请求的需求时,经常不加区分的使用拦截器、过滤器、监听器,感觉都能实现请求的拦截,现在想具体区分在实际业务中这三个的使用场景 希望大佬可以基于实际业务场景进行解答
主要内容:实现,步骤 1,Filter.java,步骤 2,AuthenticationFilter.java,DebugFilter.java,步骤 3,Target.java,步骤 4,FilterChain.java,步骤 5,FilterManager.java,步骤 6,Client.java,步骤 7,InterceptingFilterDemo.java,步骤 8拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。
拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。 过滤器链(Filter Cha
拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。 过滤器链(Filter Cha