Java Restful API的拦截详解

 更新时间:2021年09月07日 09:32:42   作者:小志的博客  
这篇文章主要介绍了Java 调用Restful API接口的拦截,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、Restful API的拦截三种方式

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

二、过滤器(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;
@Configuration
public 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提供RestAPI
public 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方式的信息,如下图:

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

5、输出第4步的内容表示自定义的Filter过滤器成功。

三、Filter过滤器特点

由上面的示例可知:Filter过滤器可以获取到原始的http请求和响应的信息,但是获取不到真正处理请求的方法信息。

四、Filter过滤器、Interceptor拦截器 、Aspect切面起作用的顺序

  • 先是Filter过滤器起作用
  • 然后Interceptor拦截器起作用
  • 然后Aspect切面起作用
  • 最后进入Controller方法中

五、当控制层(即Controller层)的方法抛异常时,Filter过滤器、Interceptor拦截器 、Aspect切面 抛异常的顺序

  • 先是Aspect切面
  • 如果使用@ControllerAdvice自定义异常,再进入这个处理异常类
  • 然后Interceptor拦截器
  • 然后Filter过滤器
  • 如果都没处理,最后到tomcat

总结

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

相关文章

  • SpringCloud服务实现同时使用eureka和nacos方法

    SpringCloud服务实现同时使用eureka和nacos方法

    这篇文章主要介绍了SpringCloud服务实现同时使用eureka和nacos方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Spring Boot中的微信支付全过程(小程序)

    Spring Boot中的微信支付全过程(小程序)

    微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的。今天通过本文给大家介绍Spring Boot中的微信支付全过程,感兴趣的朋友一起看看吧
    2022-05-05
  • 使用Java获取系统信息的常用代码整理总结

    使用Java获取系统信息的常用代码整理总结

    这篇文章主要介绍了使用Java获取系统信息的常用代码整理总结,在服务器端一般经常能够用到,欢迎收藏,需要的朋友可以参考下
    2015-11-11
  • SpringCloud zuul 网关如何解决跨域问题

    SpringCloud zuul 网关如何解决跨域问题

    这篇文章主要介绍了SpringCloud zuul网关解决跨域问题的具体实现方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • springboot项目中controller层与前端的参数传递方式

    springboot项目中controller层与前端的参数传递方式

    这篇文章主要介绍了springboot项目中controller层与前端的参数传递方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Java上传文件FTP服务器代码实例

    Java上传文件FTP服务器代码实例

    这篇文章主要介绍了Java上传文件FTP服务器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Mybatis collection查询集合属性报错的解决方案

    Mybatis collection查询集合属性报错的解决方案

    这篇文章主要介绍了Mybatis collection查询集合属性报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring Boot实现Undertow服务器同时支持HTTP2、HTTPS的方法

    Spring Boot实现Undertow服务器同时支持HTTP2、HTTPS的方法

    这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • SpringBoot整合mybatisplus和druid的示例详解

    SpringBoot整合mybatisplus和druid的示例详解

    这篇文章主要介绍了SpringBoot整合mybatisplus和druid的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • 解决java后台登录前后cookie不一致问题

    解决java后台登录前后cookie不一致问题

    本文主要介绍了java后台登录前后cookie不一致的解决方案,具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12

最新评论