沈阳做网站企业,备案域名出售是否违法,做一个网上商城需要多少钱,好的seojava 过虑器 、拦截器 、监听器的区别? 实现原理#xff1a; 过滤器基于函数回调实现。拦截器基于Java的反射机制实现。监听器用于监听特定事件的发生#xff0c;并作出相应处理。 使用范围#xff1a; 过滤器依赖于Tomcat等容器#xff0c;主要用于Web程序。拦截…java 过虑器 、拦截器 、监听器的区别? 实现原理 过滤器基于函数回调实现。拦截器基于Java的反射机制实现。监听器用于监听特定事件的发生并作出相应处理。 使用范围 过滤器依赖于Tomcat等容器主要用于Web程序。拦截器不依赖于servlet容器可应用于Web程序、Application、Swing等。监听器同样可用于监听Web程序中的特定事件。 过滤器的应用场景 1、过滤敏感词汇防止sql注入 2、设置字符编码 3、URL级别的权限访问控制 4、压缩响应信息 拦截器的应用场景 1、登录验证判断用户是否登录。 2、权限验证判断用户是否有权限访问资源如校验token 3、日志记录记录请求操作日志用户ip访问时间等以便统计请求访问量。 4、处理cookie、本地化、国际化、主题等。 5、性能监控监控请求处理时长等。 6、通用行为读取cookie得到用户信息并将用户对象放入请求从而方便后续流程使用 触发时机 过滤器在请求进入Servlet之前和响应返回给前端之前进行预处理。拦截器在请求进入Servlet后但在进入Controller之前进行预处理。监听器在特定事件发生时触发如Servlet生命周过滤器、拦截器和监听器的简单示例期中的创建、初始化、销毁等。
过滤器、拦截器和监听器的简单示例
import javax.servlet.*;
import java.io.IOException;public class SimpleFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 过滤器初始化时执行的方法System.out.println(Filter initialized);}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 在请求处理之前可以添加逻辑System.out.println(Before request processing);chain.doFilter(request, response); // 将请求传递给下一个过滤器或目标资源// 在请求处理之后可以添加逻辑System.out.println(After request processing);}Overridepublic void destroy() {// 过滤器销毁时执行的方法System.out.println(Filter destroyed);}
}import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SimpleInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 在请求处理之前进行调用Controller方法调用之前System.out.println(Before Controller method);return true; // 只有返回true才会继续向下执行返回false取消当前请求}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// 请求处理之后进行调用但是在视图被渲染之前Controller方法调用之后System.out.println(After Controller method, before view rendering);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// 在整个请求结束之后被调用也就是在DispatcherServlet渲染了对应的视图之后执行主要用于进行资源清理工作System.out.println(After view rendering);}
}import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class SimpleListener implements ServletContextListener {Overridepublic void contextInitialized(ServletContextEvent sce) {// 当ServletContext被初始化时调用System.out.println(ServletContext initialized);}Overridepublic void contextDestroyed(ServletContextEvent sce) {// 当ServletContext被销毁时调用System.out.println(ServletContext destroyed);}
}如何配置过滤器、拦截器和监听器
Component
public class MyFilter implements Filter {// 实现doFilter等方法
}// 拦截器 注入
Configuration
public class WebConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor()).addPathPatterns(/**);}
}Component
public class MyListener implements ServletContextListener {// 实现contextInitialized、contextDestroyed等方法
}