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

做网站都需要学什么语言抓取关键词的软件

做网站都需要学什么语言,抓取关键词的软件,网站建设需要那些人才,网站做美食视频挣钱吗1. feign.RequestInterceptor 简介 Feign 是一个声明式 Web 服务客户端,用于简化 HTTP 请求的编写与管理。feign.RequestInterceptor 是 Feign 提供的一个接口,用于在请求发出之前对其进行拦截和修改。这在微服务架构中非常有用,比如在请求中…

1. feign.RequestInterceptor 简介

Feign 是一个声明式 Web 服务客户端,用于简化 HTTP 请求的编写与管理。feign.RequestInterceptor 是 Feign 提供的一个接口,用于在请求发出之前对其进行拦截和修改。这在微服务架构中非常有用,比如在请求中统一添加认证头、日志追踪标识、设置自定义头等,从而提升代码的可维护性和一致性。

RequestInterceptor 接口的核心方法是:

void apply(RequestTemplate template);

该方法会在每次 Feign 发起请求之前被调用。可以通过 RequestTemplate 对象修改请求的以下内容:

  • 添加或修改请求头(Headers)
  • 添加或修改请求参数(Query Parameters)
  • 修改请求体(Body)
  • 添加日志或追踪信息
  • 添加身份验证信息(如 Token、OAuth 令牌等)

2. RequestInterceptor使用示例

step1.创建 AuthRequestInterceptor。

该拦截器是一个简单的 RequestInterceptor 实现,用于在所有请求中添加认证 Token:

import feign.RequestInterceptor;
import feign.RequestTemplate;public class AuthRequestInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {// 添加认证 Token 到请求头template.header("Authorization", "Bearer your_access_token_here");}
}

step2. 将拦截器应用到 Feign Client

通过以下两种方式将 AuthRequestInterceptor 应用到你的 Feign Client 中:

方法一:通过 @FeignClient 注解配置

import org.springframework.cloud.openfeign.FeignClient;//注意:configuration 属性接受一个类或多个类,用于配置 Feign Client 的行为。
@FeignClient(name = "user-service",configuration = AuthRequestInterceptor.class
)
public interface UserClient {@GetMapping("/users/{id}")User getUser(@PathVariable("id") Long id);
}

方法二:通过配置类注册为 Bean

先在配置类中注册 RequestInterceptor 为 Bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FeignConfig {@Beanpublic RequestInterceptor authRequestInterceptor() {return new AuthRequestInterceptor();}
}

再在 @FeignClient 中引用配置类:

@FeignClient(name = "user-service",configuration = FeignConfig.class
)
public interface UserClient {@GetMapping("/users/{id}")User getUser(@PathVariable("id") Long id);
}

3. 一个完整的示例

3.1 场景说明

在微服务架构中,使用 Feign 作为 HTTP 客户端时,我们常常需要对请求进行统一处理。这些需求可以通过多个 RequestInterceptor 实现,并在 Feign 请求发送前依次执行。下面我们通过一个实际场景来演示如何配置多个 RequestInterceptor 并使用它们。

我们有一个名为 order-service 的服务,它通过 Feign 调用 user-service 来获取用户信息。在调用过程中,我们需要:

  1. 添加认证 Token(如 JWT);
  2. 生成请求追踪 ID(用于链路追踪);
  3. 记录请求日志(便于调试与监控)。

3.2 项目结构

src/main/java
├── config
│   └── FeignConfig.java
├── interceptor
│   ├── AuthInterceptor.java
│   ├── TraceInterceptor.java
│   └── LoggingInterceptor.java
├── client
│   └── UserClient.java
└── Application.java

3.3 代码

step1. 定义多个 RequestInterceptor

AuthInterceptor: 添加认证信息

package com.example.interceptor;import feign.RequestInterceptor;
import feign.RequestTemplate;public class AuthInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {template.header("Authorization", "Bearer your_access_token");}
}

TraceInterceptor: 添加请求追踪 ID

package com.example.interceptor;import feign.RequestInterceptor;
import feign.RequestTemplate;
import java.util.UUID;public class TraceInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {String traceId = UUID.randomUUID().toString();template.header("X-Request-ID", traceId);}
}

LoggingInterceptor:记录请求日志

// LoggingInterceptor.java
package com.example.interceptor;import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LoggingInterceptor implements RequestInterceptor {private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);@Overridepublic void apply(RequestTemplate template) {logger.info("Sending request to: {}", template.url());logger.info("Method: {}, Headers: {}", template.method(), template.headers());}
}

step2.配置多个 RequestInterceptor

将多个拦截器注册为 Bean,并统一配置到 Feign Client 中:

package com.example.config;import com.example.interceptor.AuthInterceptor;
import com.example.interceptor.LogginInterceptor;
import com.example.interceptor.TraceInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FeignConfig {@Beanpublic AuthInterceptor authInterceptor() {return new AuthInterceptor();}@Beanpublic TraceInterceptor traceInterceptor() {return new TraceInterceptor();}@Beanpublic LogginInterceptor loggingInterceptor() {return new LogginInterceptor();}
}

⚠️ 注意:Spring Boot 会自动将所有 RequestInterceptor 类型的 Bean 注册到 Feign 中,无需手动注入,只要 Feign Client 使用了对应的配置。

step3. Feign Client 使用配置

package com.example.client;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient(name = "user-service",configuration = FeignConfig.class // 关键:引用配置类
)
public interface UserClient {@GetMapping("/users/{id}")String getUserById(@PathVariable("id") Long id);
}

当调用 userClient.getUserById(123) 时,控制台输出如下:

INFO  LoggingInterceptor - Sending request to: http://user-service/users/123
INFO  LoggingInterceptor - Method: GET, Headers: {Authorization=[Bearer your_access_token], X-Request-ID=[abc123...]}

拦截器执行顺序说明

Feign 默认按照 Bean 注册顺序执行 RequestInterceptor。你可以通过 @Order 注解改变执行顺序,例如:

@Order(1)
public class AuthInterceptor implements RequestInterceptor { ... }@Order(2)
public class TraceInterceptor implements RequestInterceptor { ... }

3.4 其他用法

3.4.1 可以不使用@FeignClient 配置的做法

也可以将 FeignConfig 类集成到 Spring Boot 的自动配置类中,并通过 spring.factories 注册该自动配置类时

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.client. FeignConfig

这样就无需在 @FeignClient 中通过 configuration = FeignConfig.class 显式引用配置类。

原因:

  1. 自动配置机制的作用:Spring Boot 的自动配置机制通过 spring.factories 文件注册的类在应用启动时自动加载。只要 FeignConfig 正确地注册了 RequestInterceptor 等 Bean(如 AuthInterceptorTraceInterceptorLoggingInterceptor),这些 Bean 就会被 Spring 容器管理,并且 全局生效

  2. FeignClient 的默认行为:Feign Client 在创建时会自动查找 Spring 容器中所有 RequestInterceptor 类型的 Bean,并按照注册顺序依次应用。因此,只要这些拦截器被正确注册为 Spring Bean,就不需要通过 @FeignClient(configuration = ...) 引用配置类。        

3.4.2 何时仍需使用@FeignClient 配置

虽然大多数情况下不需要显式引用配置类,但在以下场景中仍可能需要使用 @FeignClient(configuration = FeignConfig.class)

  1. 自定义 Feign Client 的配置需求

    • 如果某个 Feign Client 需要使用特定的配置类(比如不同的拦截器组合或覆盖默认配置),可以通过 configuration 属性指定。
    • 例如,某个 Feign Client 只需要 AuthInterceptor,而其他 Feign Client 需要 AuthInterceptor + LoggingInterceptor
  2. 控制 Bean 加载顺序

    • 如果拦截器的执行顺序非常重要,可以通过 @Order 注解或在配置类中显式控制顺序。
    • 使用 @FeignClient(configuration = FeignConfig.class) 可以确保配置类中的 Bean 被优先加载。
  3. 避免自动配置与手动配置冲突

    • 如果自动配置类和手动配置类中存在相同类型的 Bean(如多个 RequestInterceptor 实现),可能会导致冲突。此时可通过 @FeignClient(configuration = ...) 显式指定。

3.4.3 总结

场景是否需要 @FeignClient(configuration = FeignConfig.class)
FeignConfig 已通过自动配置类注册到 Spring 容器❌ 不需要
某个 Feign Client 需要自定义拦截器组合✅ 需要
需要控制拦截器的执行顺序✅ 需要(结合 @Order 使用)
避免自动配置与手动配置冲突✅ 需要

实践建议

  • 优先使用自动配置:如果所有 Feign Client 都需要相同的拦截器配置,直接通过自动配置类注册即可,无需每个 Feign Client 配置 configuration
  • 确保自动配置类正确注册:检查 FeignConfig 是否已注册到 Spring 容器,并验证拦截器是否生效。
  • 按需定制配置:如果某些 Feign Client 需要特殊处理,再通过 @FeignClient(configuration = ...) 显式指定。

http://www.dtcms.com/wzjs/189816.html

相关文章:

  • wordpress怎么用地图搜狗网站seo
  • 嘉兴做网站优化哪家好网络营销推广方案策划书
  • 施工企业会计论文农大南路网络营销推广优化
  • 全国水利建设市场信用信息平台网站微营销软件
  • 宜宾网站建设费用ip域名查询
  • 做网站的工作时间著名的网络营销案例
  • 网站有什么优势制作网页用什么软件
  • 推广公司怎么找搜易网优化的效果如何
  • 如何做网站插件黄山网站seo
  • 免费推广渠道有哪些方式黄山seo公司
  • web开发就是制作网站吗沈阳网站推广优化
  • 做独立网站可以支付下单济南市最新消息
  • 中信建设有限责任公司江苏分公司企查查山西网站seo
  • 创建私人网站最好用的磁力搜索器
  • 建设建设部网站小学生抄写新闻20字
  • 怎样判断网站的seo信息好坏网络推广的工作内容
  • 企业自建网站营销论文市场调研的五个步骤
  • 建设银行淮安招聘网站百度指数数据分析平台官网
  • 个人单页网站建设广州网络seo公司
  • 微信小程序登陆入口官网seo管理系统培训运营
  • PS做任务的网站搜索引擎营销策略有哪些
  • 北京传媒公司appstore关键词优化
  • 网推和地推的区别优化网站技术
  • 网站建设运城东莞网络优化哪家好
  • 没网站怎么做cpa重庆seo怎么样
  • dedecms网站地图插件百度推广客户端下载
  • 动态网站制作视频教程网站推广优化外包公司
  • 网站建设昆明网络公司网络推广外包要多少钱
  • 我要网站建设微博上如何做网站推广
  • 西安保洁公司网站建设如何自己做引流推广