当前位置: 首页 > news >正文

临沂网站建设公司全国鄂州网站制作企业

临沂网站建设公司全国,鄂州网站制作企业,百度开发者平台,免费无代码开发平台前言很多时候#xff0c;当你以为掌握了事实真相的时间#xff0c;如果你能再深入一点#xff0c;你可能会发现另外一些真相。比如面向切面编程的最佳编程实践是AOP#xff0c;AOP的主要作用就是可以定义切入点#xff0c;并在切入点纵向织入一些额外的统一操作#xff0…前言很多时候当你以为掌握了事实真相的时间如果你能再深入一点你可能会发现另外一些真相。比如面向切面编程的最佳编程实践是AOPAOP的主要作用就是可以定义切入点并在切入点纵向织入一些额外的统一操作避免与业务代码过度耦合。熟悉java web项目的都知道另外还有过滤器filter、拦截器interceptor也有类似AOP的功能特性那么问题来了为什么一般说面向切面编程就是指AOP而不是过滤器和拦截器过滤器和拦截器在Spring boot中怎么实现这三者之间有什么区别Springboot项目快速实现Aop功能中分享了AOP的相关实现下面将再用两到三篇文章分别和大家分享一下过滤器、拦截器的实现以及AOP、过滤器、拦截器之间的横向对比以便在业务开发中能够快速、正确选对具体实现方法。环境配置jdk版本:1.8开发工具Intellij iDEA 2020.1springboot:2.3.9.RELEASEFilter简介Filter 中文意思是过滤器Filter的全限定类名是javax.servlet.Filter可以看出这是与servelt相关的一个接口SpringMVC核心是DispatcherServlet而DispatcherServlet又继承了Servlet进而可以推测出Filter与SpringMVC也是关联关系。事实上这样的推测也是正确的在SpringMVC项目中filter在浏览器与服务器之间起过滤的作用可以截取客户端和服务端之间的请求和响应信息并根据这些请求-响应信息作一些其他的操作但是要注意filter并不能改变请求-响应信息核心类FilterFilter接口的全限定类名是javax.servlet.Filter该接口有三个方法分别是1、init(...)用于初始化Filter2、doFilter(...)过滤请求和拦截响应信息的具体实现在这个方法里3、destroy(...)Filter对象被销毁时触发主要用于做一些收尾工作如资源的释放等FilterConfigFilterConfig接口的全限定类名是javax.servlet.FilterConfig该接口主要有四个方法分别是1、getFilterName() 获取Filter的名字2、getServletContext() 获取ServletContext对象即application3、getInitParameter() 获取Filter的初始化参数4、getInitParameterNames() 获取所有初始化参数的名字FilterChainFilterChainr接口的全限定类名是javax.servlet.FilterChain该接口只有一个方法是doFilter()方法用于调用Filter链上的下一个过滤器如果当前过滤器为最后一个或只有一个过滤器则该过滤器则将请求发送到目标资源。MyFilter2是自己实现的过滤器实现了Filter接口Filter接口依赖FilterChain接口和FilterConfig接口其中FilterChain接口的实现类是org.apache.catalina.core.ApplicationFilterChainFilterConfig接口的实现类是org.apache.catalina.core.ApplicationFilterConfig工作原理1、项目启动的时候先执行Filter的构造方法完成相关Filter对象的注册2、紧接着Filter对象的init()方法被调用开始对Filter做一些初始化操作3、项目启动完成后客户端每次向服务端发起请求时如果请求地址与过滤器定义的地址匹配则会执行Filter的doFilter()如果匹配上多个过滤器则会形成一个链路依次调用各个过滤器对象的doFilter()服务端作出响应后也会再次执行到各个过滤器对象的doFilter()请求和响应时过滤器链的执行顺序是先进后出4、服务器停止时调用Filter的destroy()方法用来释放资源。实现方式Springboot项目中一般有两种方式1、WebFilter注解即javax.servlet.annotation.WebFilter2、FilterRegistrationBean即org.springframework.boot.web.servlet.FilterRegistrationBean两种方式都需要在启动类上增加注解ServletComponentScan用于开启servlet相关bean的扫描其中包含有过滤器FilterSpringBootApplication ServletComponentScan public class FanfuApplication {public static void main(String[] args) {SpringApplication.run(FanfuApplication.class, args);} }代码实现1、WebFilter注解里定义一下过滤器的名字以及要对哪些请求进行过滤“/*”表示对所有的请求都过滤在实际业务中可具体对待如果在初始化的时候需要携带一些初始化的参数可以在initParams属性上使用WebInitParam注解来定义初始化参数名称和具体的值这些参数可以在filter对象初始化的时候获取到MyFIlter1和MyFIlter2使用的注解方式定义的过滤器Slf4j WebFilter(filterName myFilter1, urlPatterns /*, initParams {WebInitParam(name creator, value fanfu)}) public class MyFilter1 implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info(//myFilter1初始化开始);String creator filterConfig.getInitParameter(creator);log.info(//初始化参数creator:{},creator);}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {log.info(//myFilter1开始执行);chain.doFilter(request, response);log.info(//myFilter1结束执行);}Overridepublic void destroy() {log.info(//myfilter1被销毁);} }Slf4j WebFilter(filterName myFilter2, urlPatterns /*) public class MyFilter2 implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info(//myFilter2初始化开始);}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {log.info(//myFilter2开始执行);chain.doFilter(request, response);log.info(//myFilter2结束执行);}Overridepublic void destroy() {log.info(//myFilter2被销毁);} }2、FilterRegistrationBean方式在Springboot项目的配置类中使用FilterRegistrationBean来包装自定义的过滤器这种方式的最大好处就是可以自定义过滤器的执行顺序数字越小执行时的优先级就越高MyFIlter3和MyFIlter4是使用FilterRegistrationBean方式定义的过滤器Configuration public class WebConfig {Beanpublic FilterRegistrationBean filterRegistration1() {FilterRegistrationBean filterRegistrationBean new FilterRegistrationBean();filterRegistrationBean.setFilter(new MyFilter3());filterRegistrationBean.addUrlPatterns(/*);//定义过滤器对哪些请求路径进行过滤/*表示对所有请求都过滤filterRegistrationBean.setOrder(2);//定义过滤器的执行优先级数据越小优先级越高return filterRegistrationBean;}Beanpublic FilterRegistrationBean filterRegistration2() {FilterRegistrationBean filterRegistrationBean new FilterRegistrationBean();filterRegistrationBean.setFilter(new MyFilter4());filterRegistrationBean.addUrlPatterns(/*);filterRegistrationBean.setOrder(1);return filterRegistrationBean;} }Slf4j public class MyFilter3 implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info(//MyFilter3初始化开始);}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {log.info(//MyFilter3开始执行);chain.doFilter(request,response);log.info(//MyFilter3结束执行);}Overridepublic void destroy() {log.info(//MyFilter3被销毁);} }Slf4j public class MyFilter4 implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info(//MyFilter4初始化开始);}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {log.info(//MyFilter4开始执行);chain.doFilter(request,response);log.info(//MyFilter4结束执行);}Overridepublic void destroy() {log.info(//MyFilter4被销毁);} }未定义myFilter3、myFilter4的执行优先级即采取自然排序时的执行结果在请求前myFilter3的执行时机早于myFilter4响应后myFilter3的执行时机要晚于myFilter4定义myFilter4的优先级高于myFilter3时执行结果在请求前myFilter4的执行时机早于myFilter3响应后的myFilter4的执行时机要晚于myFilter3总结过滤器的实现是比较简单通过梳理这个过程我get到以下几个点1、过滤器是用于SpringMVC项目中即与servlet相关的项目2、过滤器的执行时机是在请求前和响应后有两种实现方式即WebFilter注解和FilterRegistrationBean如果对过滤器的执行顺序没有限制要求则可以使用第一种如果对过滤器的执行顺序有明确限制则可以使用第二种3、如果有多个过滤器对象时会形成一个过滤器链过滤器的执行顺序是先进后出4、过滤器可以过滤请求和拦截响应但是不能改变请求值和响应值
http://www.dnsts.com.cn/news/106902.html

相关文章:

  • 济南网站建设培训学校国家对于学校网站建设
  • 宁波手机网站开发wordpress调用友链
  • 怎么可以创建网站成都有哪些做网站的
  • 数字营销网站建设网站f式布局
  • 昆明网站推广专员百度做网站审核要多久
  • 杭州如何设计网站首页做一般的公司网站需要多少钱
  • 做网站ddos攻击郑州短视频拍摄公司
  • 做网站到底需要什么做招标投标网站如何
  • 网站开发进度设计与阶段目标建设银行网站地址
  • 网站管理员怎样管理员权限设置diy学做衣服网站
  • 徐州网站建设案例vivo手机商城
  • 在网站上做宣传属于广告费用吗女教师网课入06654侵录屏
  • 免费建站哪里找wordpress调用wecenter
  • 档案互动网站建设html网页设计作品中国传统文化
  • 广元网站设计园林景观设计公司成都
  • 北京建设教育网站室内设计平面图案例
  • 自建网站避免侵权中信建设有限责任公司江苏分公司
  • php的网站有哪些网页设计素材以及效果图
  • 哪些网站专做新闻网站建设服务器和空间费
  • 木方东莞网站建设技术支持门业网站模板
  • 网站建设的软件是哪个好网站建设中404什么意思
  • 大型网站设计方案做外汇门户网站
  • 模板网站怎么修改长沙创建一个网站需要多少钱
  • 广州做网站建设的公司哪家好微信app下载安装官方版2022
  • 建设初级中学网站好看的网站后台界面
  • 优质的低价网站建设深圳代理记账费用
  • 宣威做网站推广的公司住建局网站官网
  • 江苏建设装饰集团有限公司爱站seo工具包免费版
  • 网站升级建设招标公告wordpress qq头像
  • 网站建设公司哪家好智搜宝wordpress菜单项目边距和填充