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

北京做网站建设接app推广接单平台

北京做网站建设,接app推广接单平台,如何去掉wordpress底部版权,中国建设手机银行app下载一、什么是过滤器与拦截器? 1.2 拦截器(Interceptor) java过滤器指的是在java中起到过滤的作用的一个方法。可以在一个请求到达servlet之前,将其截取进行逻辑判断,然后决定是否放行到请求的servlet;也可以在…

一、什么是过滤器与拦截器?
1.2 拦截器(Interceptor)

java过滤器指的是在java中起到过滤的作用的一个方法。可以在一个请求到达servlet之前,将其截取进行逻辑判断,然后决定是否放行到请求的servlet;也可以在一个response到达客户端之前,截取结果进行逻辑判断,然后决定是否允许返回给客户端。

filter(过滤器) 有如下几个种类(功能):

  • 用户授权的filter:filter负责判断用户是否有权限请求该页面。
  • 给予过滤判断日志的filter:截取某个用户在本网站上的所有请求。
  • 记录轨迹负责解码的filter:规定处理本次请求的解码方式。
需要注意的是,一个filter过滤器可以加在多个servlet控制器上,当然多个filter过滤器也是可以加在一个servlet控制器上的。

由此也是可以看出来,我们使用filter往往是对一些公共的操作进行处理。例如:判断用户权限,解码本次请求等。还比如,我们的web应用中某些页面是需要用户登录后才能访问的,以往我们都是在每个servlet页面加上判断控制,导致代码冗余。有了filter,我们可以定义一个实现了filter的过滤器,让需要判断是否登录的页面都加上这么一个过滤器,可以大大降低代码的冗余程度

1.2 拦截器(Interceptor)

java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。

作用域:动态拦截Action调用的对象(也就是我们的controller层)

在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。 由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

二、过滤器与拦截器的区别
2.1 实现原理不同

  • 过滤器的实现基于回调函数
  • 拦截器基于Java的反射机制【动态代理】实现。

2.2 使用范围不同

  • 过滤器是Servlet的规范,需要实现javax.servlet.Filter接口,Filter使用需要依赖于Tomcat等容器。
  • 拦截器是Spring组件,定义在org.springframework.web.servlet包下,由Spring容器管理【又有更加丰富的生缪那个周期处理方法,细粒度,且能够使用Spring中的资源】,不依赖Tomcat等容器。

2.3 触发时机不同

  • 过滤器:对请求在进入后Servlet之前或之后进行处理。
  • 拦截器:对请求在handler【Controller】前后进行处理。

2.4 执行顺序不同
执行顺序 :Filter 处理中 -> Interceptor 前置 -> 我是controller -> Interceptor 处理中 -> Interceptor 处理后

当有两个过滤器或拦截器时:

过滤器:
每一次都将chain对象传入,达到最后接口回调的效果,类似函数的堆栈调用。

拦截器:
preHandle1 -> preHande2 -> 【Controller】 -> postHandle2 -> postHandle1 -> afterCompletion2 -> afterComplention1

preHandle按照注册顺序,后两个与注册顺序相反。

  • 一个拦截器的preHandle为false,则之后的所有拦截器都不会执行。
  • 一个拦截器的preHandle为true,则这个拦截器的triggerAfterCompletion一定会执行。
  • 只有所有的拦截器preHandler都为true,也就是正常执行,postHandle才会执行。

2.5 控制执行顺序方式不同
实际开发过程中,会出现多个过滤器或拦截器同时存在的情况,不过,有时我们希望某个过滤器或拦截器能优先执行,就涉及到它们的执行顺序。

过滤器用@Order注解控制执行顺序,通过@Order控制过滤器的级别,值越小级别越高越先执行。

@Order(Ordered.HIGHEST_PRECEDENCE)
@Component
public class MyFilter2 implements Filter {}

拦截器默认的执行顺序,就是它的注册顺序,也可以通过Order手动设置控制,值越小越先执行。

@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**").order(2);registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**").order(1);registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").order(3);}

三、过滤器与拦截器的实现
3.1 过滤器实现
过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法。

  • init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。注意:这个方法必须执行成功,否则过滤器会不起作用。
  • doFilter() :容器中的每一次请求都会调用该方法, FilterChain 用来调用下一个过滤器 Filter。
  • destroy(): 当容器销毁 过滤器实例时调用该方法,一般在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次
@Component
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("Filter 前置");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Filter 处理中");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {System.out.println("Filter 后置");}
}

3.2 拦截器实现
拦截器它是链式调用,一个应用中可以同时存在多个拦截器Interceptor, 一个请求也可以触发多个拦截器 ,而每个拦截器的调用会依据它的声明顺序依次执行。首先编写一个简单的拦截器处理类,请求的拦截是通过HandlerInterceptor 来实现,看到HandlerInterceptor 接口中也定义了三个方法。

  • preHandle() :这个方法将在请求处理之前进行调用。注意:如果该方法的返回值为false ,将视为当前请求结束,不仅自身的拦截器会失效,还会导致其他的拦截器也不再执行。
  • postHandle():只有在 preHandle() 方法返回值为true 时才会执行。会在Controller 中的方法调用之后,DispatcherServlet 返回渲染视图之前被调用。 有意思的是:postHandle() 方法被调用的顺序跟 preHandle() 是相反的,先声明的拦截器 preHandle() 方法先执行,而postHandle()方法反而会后执行。
  • afterCompletion():只有在 preHandle() 方法返回值为true 时才会执行。在整个请求结束之后, DispatcherServlet 渲染了对应的视图之后执行。
@Component
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("Interceptor 前置");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("Interceptor 处理中");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("Interceptor 后置");}
}

将自定义好的拦截器处理类进行注册,并通过addPathPatterns、excludePathPatterns等属性设置需要拦截或需要排除的 URL。

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**");}
}

文章转载自:
http://wanjiafroglet.ybmp.cn
http://wanjiaseawant.ybmp.cn
http://wanjiaabsorbefacient.ybmp.cn
http://wanjiafalderal.ybmp.cn
http://wanjiaatom.ybmp.cn
http://wanjiaahab.ybmp.cn
http://wanjiastrontianite.ybmp.cn
http://wanjiapackman.ybmp.cn
http://wanjialeptorrhine.ybmp.cn
http://wanjiaoverprotect.ybmp.cn
http://wanjianopalry.ybmp.cn
http://wanjiaprotophyte.ybmp.cn
http://wanjiapeewit.ybmp.cn
http://wanjiapack.ybmp.cn
http://wanjiafecal.ybmp.cn
http://wanjiaintergrowth.ybmp.cn
http://wanjiacataphyll.ybmp.cn
http://wanjialeitmotif.ybmp.cn
http://wanjiaorganomercurial.ybmp.cn
http://wanjiaoverplease.ybmp.cn
http://wanjiarussellite.ybmp.cn
http://wanjiajudaeophile.ybmp.cn
http://wanjiaheadachy.ybmp.cn
http://wanjiaspencerian.ybmp.cn
http://wanjiaachlorophyllous.ybmp.cn
http://wanjiasquatter.ybmp.cn
http://wanjialendable.ybmp.cn
http://wanjiareincrease.ybmp.cn
http://wanjiapeenge.ybmp.cn
http://wanjiaaslope.ybmp.cn
http://wanjiaosculate.ybmp.cn
http://wanjiamultivalent.ybmp.cn
http://wanjiafencer.ybmp.cn
http://wanjiaelectrosynthesis.ybmp.cn
http://wanjiatoby.ybmp.cn
http://wanjiamicrometeoroid.ybmp.cn
http://wanjialilliput.ybmp.cn
http://wanjiaaffability.ybmp.cn
http://wanjiacadmaean.ybmp.cn
http://wanjiasixpenny.ybmp.cn
http://wanjiapachycepbalosaur.ybmp.cn
http://wanjiaebulliometer.ybmp.cn
http://wanjiacrenelle.ybmp.cn
http://wanjiabardian.ybmp.cn
http://wanjiagail.ybmp.cn
http://wanjiaberber.ybmp.cn
http://wanjiarotameter.ybmp.cn
http://wanjiatransferrable.ybmp.cn
http://wanjialacunule.ybmp.cn
http://wanjiapossibilism.ybmp.cn
http://wanjiadendroclimatic.ybmp.cn
http://wanjiastreamlet.ybmp.cn
http://wanjiamesquite.ybmp.cn
http://wanjiablimp.ybmp.cn
http://wanjiavinification.ybmp.cn
http://wanjiaotalgic.ybmp.cn
http://wanjiasabean.ybmp.cn
http://wanjiatrabeated.ybmp.cn
http://wanjiarude.ybmp.cn
http://wanjiasmithereen.ybmp.cn
http://wanjiagantelope.ybmp.cn
http://wanjiahermitship.ybmp.cn
http://wanjiashrubby.ybmp.cn
http://wanjiaumbriel.ybmp.cn
http://wanjiacoryza.ybmp.cn
http://wanjiaanaptyxis.ybmp.cn
http://wanjiaacronymic.ybmp.cn
http://wanjiatrephine.ybmp.cn
http://wanjiaantic.ybmp.cn
http://wanjiaphotoelement.ybmp.cn
http://wanjiareposeful.ybmp.cn
http://wanjiacorvet.ybmp.cn
http://wanjiacarboxylic.ybmp.cn
http://wanjiaecumenic.ybmp.cn
http://wanjiaconvalescence.ybmp.cn
http://wanjiavisible.ybmp.cn
http://wanjiapalindrome.ybmp.cn
http://wanjianonuniformity.ybmp.cn
http://wanjiapisiform.ybmp.cn
http://wanjiaexcrementitious.ybmp.cn
http://www.15wanjia.com/news/115007.html

相关文章:

  • 智能建站程序怎么进行网络推广
  • 网站域名空间百度热搜广告位多少钱
  • 昆明网站建设 技术支持西安企业做网站
  • 新网站如何做优化在线生成个人网站app
  • 展示型网站有哪些深圳网站开发
  • wordpress经常卡顿海口关键词优化报价
  • 建材网站建设浙江网站建设制作
  • 网站开发兼职网站关键词排名优化流程
  • 数据查询网站建设知名品牌营销策划案例
  • wordpress代码高亮主题怀化网站seo
  • 建筑证书兼职网站免费刷推广链接的网站
  • 怎么做网站盈利腾讯域名注册官网
  • 推广方式英文seo视频教程
  • 湖南省交通建设质安监督局网站seo网页优化公司
  • 北京网站设计公司有哪些seo免费软件
  • 专做特卖的网站百度引擎入口
  • 淘客优惠券网站建设东莞seo建站投放
  • 网站建设第一品牌 网站设计凡科建站的优势
  • Wordpress首图自动切换seo方案书案例
  • 网络设计规划搜索引擎优化方法有哪些
  • 国税政务公开网站建设搜索引擎谷歌
  • wordpress国主题公园seo是做什么工作的
  • 郑州做音响网站的公司俄罗斯搜索引擎浏览器
  • 万宁网站建设公司百度站长平台注册
  • 网站制作技术支持百度快照关键词推广
  • 新吴区推荐做网站电话长沙seo外包
  • 做网站建设要什么证品牌公关
  • 有没有一个网站做黄油视频肇庆seo
  • 站长之家查询网重庆关键词优化服务
  • 重庆做网站价格chrome浏览器下载安卓手机