SpringBoot常用拦截器之ClientHttpRequestInterceptor

这篇具有很好参考价值的文章主要介绍了SpringBoot常用拦截器之ClientHttpRequestInterceptor。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、SpringBoot常用拦截器

下面3种拦截器,都是http拦截器,在处理业务逻辑之前对http请求信息进行处理,比如获取请求头,请求参数,设置请求头,请求参数等等

思路清晰,先说jar包:

HandlerInterceptor>spring-webmvc项目,org.springframework.web.servlet.HandlerInterceptor
ClientHttpRequestInterceptor>spring-web项目,org.springframework.http.client.ClientHttpRequestInterceptor
RequestInterceptor>feign-core项目,feign.RequestInterceptor

一目了然,从项目名称和包路径可以看出,3个拦截器分别属于3个不同的项目,所以他们之前的作用也有区别,在这里我大概讲一下3个拦截器的基本应用和区别:

3个拦截器的共同点,都是对http请求进行拦截,但是http请求的来源不同:

HandlerInterceptor是最常规的,其拦截的http请求是来自于客户端浏览器之类的,是最常见的http请求拦截器;
ClientHttpRequestInterceptor是对RestTemplate的请求进行拦截的,在项目中直接使用restTemplate.getForObject的时候,会对这种请求进行拦截,经常被称为:RestTempalte拦截器或者Ribbon拦截器;
RequestInterceptor常被称为是Feign拦截器,由于Feign调用底层实际上还是http调用,因此也是一个http拦截器,在项目中使用Feign调用的时候,可以使用此拦截器;

RequestInterceptor

Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。Feign的RequestInterceptor接口是用来拦截请求并进行处理的,可以在请求发送前或发送后对请求进行修改或者添加一些额外的信息。

下面是一个简单的示例代码,演示如何使用Feign的RequestInterceptor接口:

public class MyRequestInterceptor implements RequestInterceptor {
    
    @Override
    public void apply(RequestTemplate template) {
        // 在请求头中添加自定义的信息
        template.header("Authorization", "Bearer my-token");
        
        // 对请求体进行修改
        String requestBody = template.requestBody().asString();
        String modifiedRequestBody = modifyRequestBody(requestBody);
        template.body(modifiedRequestBody);
    }
    
    private String modifyRequestBody(String requestBody) {
        // 对请求体进行修改
        return requestBody;
    }
}

在上面的代码中,我们实现了Feign的RequestInterceptor接口,并重写了其中的apply方法。在apply方法中,我们可以对请求进行各种操作,例如添加请求头信息、修改请求体等。在示例代码中,我们添加了一个名为“Authorization”的请求头信息,并对请求体进行修改。

可以在Feign客户端的构造方法中将RequestInterceptor实例传递给Feign客户端,以便在请求时进行拦截和修改:

MyService myService = Feign.builder()
        .requestInterceptor(new MyRequestInterceptor())
        .target(MyService.class, "http://localhost:8080");

在上面的代码中,我们将MyRequestInterceptor实例传递给Feign客户端的构造方法中,以便在请求时进行拦截和修改。

总之,Feign的RequestInterceptor接口可以帮助我们在发送请求之前或之后对请求进行修改或添加一些额外的信息,从而更加灵活地使用Feign客户端。


ClientHttpRequestInterceptor

ClientHttpRequestInterceptor是一个接口,用于在发送HTTP请求之前或之后拦截请求并进行修改。它可以用于添加、修改或删除请求头、请求参数、请求体等内容,以及在请求完成后处理响应。使用ClientHttpRequestInterceptor可以方便地实现一些常见的功能,例如:

1. 添加认证信息:在每个请求中添加认证信息,例如token或用户名密码。

2. 添加请求头:在每个请求中添加自定义的请求头,例如User-AgentReferer等。

3. 修改请求参数:在发送请求之前修改请求参数,例如添加时间戳、签名等。

4. 处理响应:在请求完成后处理响应,例如解析响应体、记录日志等。

使用ClientHttpRequestInterceptor需要实现其中的intercept方法,该方法接收两个参数:ClientHttpRequest和byte[],前者表示当前的请求对象,后者表示请求体的字节数组。在intercept方法中可以对请求进行修改,例如添加请求头、修改请求体等。修改后的请求会继续传递给下一个拦截器或发送到服务端。对于响应的处理可以使用ResponseExtractor或自定义的响应处理器。

示例代码:

import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;

import java.io.IOException;

public class MyInterceptor implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        // 在请求发送之前,对请求进行修改或添加一些额外的信息
        request.getHeaders().add("Authorization", "Bearer token123");

        // 执行请求
        ClientHttpResponse response = execution.execute(request, body);

        // 在请求发送之后,对响应进行修改或添加一些额外的信息
        response.getHeaders().add("Cache-Control", "no-cache");

        return response;
    }
}

在上面的示例中,我们实现了ClientHttpRequestInterceptor接口,并重写了intercept方法。在这个方法中,我们首先对请求添加了一个名为Authorization的请求头,然后通过ClientHttpRequestExecution对象的execute方法执行了请求,并得到了响应。最后,我们又对响应添加了一个名为Cache-Control的响应头,并返回了响应。

要使用这个拦截器,可以将它注册到RestTemplate中,如下所示:

import org.springframework.web.client.RestTemplate;

public class MyClient {

    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getInterceptors().add(new MyInterceptor());

        // 发送HTTP请求
        String result = restTemplate.getForObject("http://example.com/api", String.class);
        System.out.println(result);
    }
}

在上面的示例中,我们创建了一个RestTemplate对象,并将MyInterceptor拦截器添加到了它的拦截器列表中。然后,我们使用RestTemplate对象发送了一个HTTP GET请求,并打印了响应结果。

总结:

ClientHttpRequestInterceptor是Spring框架中的一个拦截器接口,用于拦截客户端发出的HTTP请求。通过实现这个接口,并将拦截器注册到RestTemplate中,可以对请求进行修改或添加一些额外的信息。

参考博客:https://blog.csdn.net/weixin_41979002/article/details/124778961文章来源地址https://www.toymoban.com/news/detail-742266.html

到了这里,关于SpringBoot常用拦截器之ClientHttpRequestInterceptor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot中创建拦截器

    目录 目的 实现过程         1、创建拦截器         2、注册拦截器 完整代码         在Springboot项目中创建拦截器,在进入Controller层之前拦截请求,可对拦截到的请求内容做响应处理,如:校验请求参数、验证证书等操作;         首先自定义创建一个类,然后

    2024年02月13日
    浏览(45)
  • springboot 拦截器的配置

    编写拦截器 对于前后端分离架构 preHandle 会在方法执行前执行,按照拦截器顺序执行 postHandle 会在方法return前执行,按照拦截器顺序逆序执行 afterCompletion 方法return 之后执行 ,按照拦截器顺序逆序执行 拦截器注册

    2024年02月15日
    浏览(42)
  • 全面了解SpringBoot拦截器

    在本文中,我们将详细介绍SpringBoot中的拦截器,包括拦截器的概念、作用、实现方式、执行顺序、生命周期以及高级应用。最后,我们还将探讨拦截器的性能优化策略和常见问题。 拦截器(Interceptor)是一种特殊的组件,它可以在请求处理的过程中对请求和响应进行拦截和处

    2024年02月17日
    浏览(50)
  • Springboot如何配置拦截器

    在 Spring Boot 中,配置拦截器需要继承 HandlerInterceptorAdapter 类,并重写其中的 preHandle()、postHandle()、afterCompletion() 等方法。下面是一个详细的实例: 首先,我们创建一个拦截器类 MyInterceptor,继承 HandlerInterceptorAdapter 类,并在其中重写 preHandle() 方法: 其中,preHandle() 方法用于

    2024年02月13日
    浏览(46)
  • Springboot中自定义拦截器

    Spring Boot 中使用拦截器 参考:https://blog.csdn.net/taojin12/article/details/88342576?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170823498416800197050192%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257Drequest_id=170823498416800197050192biz_id=0utm_medium=distribute.pc_search_result.none-task-blog-2 all top_positive~defa

    2024年02月19日
    浏览(58)
  • SpringBoot(八)拦截器Interceptor

        上篇介绍了Filter过滤器的使用,提起过滤器,就不得不再提起另外一个叫做拦截器的东西。两者的作用类似,都可以实现拦截请求的作用,但其实两者有着非常大的区别。本篇,我们就来学习下拦截器的使用。     如果你是新手,且没看过我之前的一系列SpringBoot文章,

    2024年02月17日
    浏览(44)
  • SpringBoot统一功能处理(拦截器)

    1.1自定义拦截器 写一个类去实现 HandlerInterceptor接口 表示当前类是一个拦截器,再 重写HandlerInterceptor接口中的方法 , preHandle 为在方法 执行前拦截 ,postHandle为方法执行中拦截,afterCompletion为方法执行中拦截.需要在什么时候拦截就重写什么方法 2.1.配置拦截规则 实现 WebMvcConfigur

    2024年02月14日
    浏览(41)
  • 【SpringBoot】拦截器(Interceptor)的使用

            拦截器(Interceptor)是一种特殊的组件,它可以在请求处理的过程中对请求和响应进行拦截和处理。拦截器可以在请求到达目标处理器之前、处理器处理请求之后以及视图渲染之前执行特定的操作。拦截器的主要目的是在不修改原有代码的情况下,实现对请求和响

    2024年02月04日
    浏览(47)
  • springboot web开发登录拦截器

    在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器。这样就可以拦截所有的请求并做相应的处理。 应用场景 日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计等。 权限检查:如登陆检测,进入处理器检测是否登陆,如果没有直接

    2024年02月10日
    浏览(37)
  • SpringBoot自定义拦截器interceptor使用详解

    Spring Boot拦截器Intercepter详解 Intercepter是由Spring提供的Intercepter拦截器,主要应用在日志记录、权限校验等安全管理方便。 使用过程 1.创建自定义拦截器,实现HandlerInterceptor接口,并按照要求重写指定方法 HandlerInterceptor接口源码: 根据源码可看出HandlerInterceptor接口提供了三个

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包