Resultful API的拦截(过滤器——Filter)

代码 代码 1513 人阅读 | 0 人回复

<
那里写目次题目



1、Resultful API的阻拦三种方法



  • 过滤器(Filter)
  • 阻拦器(Interceptor)
  • 切片(Aspect)
2、过滤器(Filter)的演示示例(springboot项目)

1、自定义一个称号为TimeFilter的过滤器,代码以下:
  1. package com.xz.springsecuritydemo.filter;
  2. import org.springframework.stereotype.Component;
  3. import javax.servlet.*;
  4. import java.io.IOException;
  5. import java.util.Date;
  6. @Component//增加该注解使过滤器启感化,假如没有利用@Component注解需求写设置类,例lz写的WebConfig停止注册
  7. public class TimeFilter implements Filter {
  8.     //正在掌握器办法(即controller类中的办法)挪用之前挪用
  9.     @Override
  10.     public void init(FilterConfig filterConfig) throws ServletException {
  11.         System.out.println("Time Filter init");
  12.     }
  13.     //正在掌握器办法(即controller类中的办法)挪用以后挪用
  14.     @Override
  15.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  16.         System.out.println("Time Filter start");
  17.         long startTime = new Date().getTime();
  18.         chain.doFilter(request,response);
  19.         long endTime = new Date().getTime();
  20.         System.out.println("Filter耗时:"+(endTime-startTime));
  21.         System.out.println("Time Filter end");
  22.     }
  23.     //正在掌握器办法(即controller类中的办法)挪用以后挪用
  24.     @Override
  25.     public void destroy() {
  26.         System.out.println("Time Filter destroy");
  27.     }
  28. }
复造代码
2、自定义一个WebFilterConfig设置类,步调1中假如没有利用@Component注解,需求利用基于java的设置方法完成,代码以下:
  1. package com.xz.springsecuritydemo.filter;
  2. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import java.util.ArrayList;
  6. @Configuration
  7. public class WebFilterConfig {
  8.     @Bean
  9.     public FilterRegistrationBean timeFilter(){
  10.         FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
  11.         filterRegistrationBean.setFilter(new TimeFilter());
  12.         ArrayList<String> list = new ArrayList<>();
  13.         list.add("/*");//过滤一切途径
  14.         filterRegistrationBean.setUrlPatterns(list);
  15.         return filterRegistrationBean;
  16.     }
  17. }
复造代码
3、自定义一个掌握类,代码以下
  1. @RestController//暗示此Controller供给RestAPI
  2. public class SysQueryController {
  3.    /**
  4.      * @RequestMapping  映照http恳求url到java办法
  5.      * @RequestParam    映照恳求参数到java办法的参数
  6.      */
  7.     @RequestMapping(value = "/user1",method = RequestMethod.GET)
  8.     public void query1(@RequestParam String username){
  9.         System.out.println("query1====="+username);
  10.     }
  11. }
复造代码
4、测试步调


  • 启动项目时会先输出自定义过滤器类TimeFilter的init方法的疑息,以下图:
    145901wn2eivgoywpyofe2.jpg

  • 再用postman测试东西收收恳求,以下图:
    145901eb86vaumz6pv68kz.jpg

  • 最初检察掌握态输出疑息,以下图:
    1. //输出内乱容
    2. Time Filter start
    3. query1=====xz
    4. Filter耗时:128
    5. Time Filter end
    复造代码
    145901li4blo8z2g0l0b5i.jpg

5、输出第4步的内乱容暗示自定义的Filter过滤器胜利。
3、Filter过滤器特性



  • 由上里的示例可知:Filter过滤器能够获得到本初的http恳求战响应的疑息,可是获得没有到实正处置恳求的办法疑息。
4、Filter过滤器、Interceptor阻拦器 、Aspect切里起感化的挨次



  • 先是Filter过滤器起感化
  • 然后Interceptor阻拦器起感化
  • 然后Aspect切里起感化
  • 最初进进Controller办法中
5、当掌握层(即Controller层)的办法扔非常时,Filter过滤器、Interceptor阻拦器 、Aspect切里 扔非常的挨次



  • 先是Aspect切里
  • 假如利用@ControllerAdvice自定义非常,再进进那个处置非常类
  • 然后Interceptor阻拦器
  • 然后Filter过滤器
  • 假如皆出处置,最初到tomcat

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则