gpt4 book ai didi

Java Restful API的拦截详解

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 36 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java Restful API的拦截详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、Restful API的拦截三种方式

  • 过滤器(Filter)
  • 拦截器(Interceptor)
  • 切片(Aspect)

  。

2、过滤器(Filter)的演示示例(springboot项目)

1、自定义一个名称为TimeFilter的过滤器,代码如下:

package com.xz.springsecuritydemo.filter;import org.springframework.stereotype.Component;import javax.servlet.*;import java.io.IOException;import java.util.Date;@Component//添加该注解使过滤器启作用,如果不使用@Component注解需要写配置类,例lz写的WebConfig进行注册public class TimeFilter implements Filter {  //在控制器方法(即controller类中的方法)调用之前调用  @Override  public void init(FilterConfig filterConfig) throws ServletException {      System.out.println("Time Filter init");  }  //在控制器方法(即controller类中的方法)调用之后调用  @Override  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {      System.out.println("Time Filter start");      long startTime = new Date().getTime();      chain.doFilter(request,response);      long endTime = new Date().getTime();      System.out.println("Filter耗时:"+(endTime-startTime));      System.out.println("Time Filter end");  }  //在控制器方法(即controller类中的方法)调用之后调用  @Override  public void destroy() {      System.out.println("Time Filter destroy");  }}

2、自定义一个WebFilterConfig配置类,步骤1中如果不使用@Component注解,需要使用基于java的配置方式实现,代码如下:

package com.xz.springsecuritydemo.filter;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.ArrayList;@Configurationpublic class WebFilterConfig {  @Bean  public FilterRegistrationBean timeFilter(){      FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();      filterRegistrationBean.setFilter(new TimeFilter());      ArrayList<String> list = new ArrayList<>();      list.add("/*");//过滤所有路径      filterRegistrationBean.setUrlPatterns(list);      return filterRegistrationBean;  }}

3、自定义一个控制类,代码如下 。

@RestController//表示此Controller提供RestAPIpublic class SysQueryController { /**   * @RequestMapping  映射http请求url到java方法   * @RequestParam    映射请求参数到java方法的参数   */  @RequestMapping(value = "/user1",method = RequestMethod.GET)  public void query1(@RequestParam String username){      System.out.println("query1====="+username);  }}

4、测试步骤 。

  • 启动项目时会先输出自定义过滤器类TimeFilter的init方式的信息,如下图:

Java Restful API的拦截详解

  • 再用postman测试工具发送请求,如下图:

Java Restful API的拦截详解

  • 最后查看控制态输出信息,如下图:
//输出内容Time Filter startquery1=====xzFilter耗时:128Time Filter end

Java Restful API的拦截详解

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

  。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我的更多内容! 。

原文链接:https://blog.csdn.net/li1325169021/article/details/120121781 。

最后此篇关于Java Restful API的拦截详解的文章就讲到这里了,如果你想了解更多关于Java Restful API的拦截详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com