spring cloud 非web请求feign调用header携带数据

首先,在之前的spring cloud nacos feign服务调用携带jwtToken_K_Men的博客-CSDN博客_feign nacos博文中我们介绍了feign调用携带token的解决放法,但是那仅适用于前端发起请求从controller层进入service层产生微服务之间的调用问题。实际开发场景中我们可能遇到很多非web请求,比如定时任务等

在之前的基础上我们继续编程,直接上代码

@Configuration
public class FeignConfig implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        // 获取当前请求
 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        // 获取request
        if (null == attributes) {
            //非web请求feign调用手动设置内部系统来源不校验token但需要校验来源@InnerApi
            requestTemplate.header(Constant.SYSTEM_SOURCE, SystemSourceEnum.LMS.getCode());
        }else {
            HttpServletRequest request = attributes.getRequest();
            // 获取Header中的tokenValue
            String token = request.getHeader("Authorization");
            //这里转换一下可能postman请求过来的会有"Bearer "
            String jwtToken = token.replace("Bearer ", "");
            // 注入Feign的请求中,这里header中token的key需要和被调用方一致
            requestTemplate.header("Authorization", jwtToken);
        }
}

我的场景主要是定时任务,当定时任务发起调用时,attributes会是null,所以当非web请求进来时我们手动添加header一个系统来源的标识,并且在被调用方的controller中加入自定义注解@InnerApi,用于拦截器中进行校验,此时则不进行token校验并且需要对系统来源进行验证,当然我们可以给这个header中的数据进行加密,被调用方拦截器中解密,这样不担心被外部进行恶意攻击。当然非要进行验证也是可以的,token存放于redis中然后在获取放进header中也没毛病

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用Feign来进行远程调用,并设置请求头。要进行团购请求,您可以按照以下步骤操作: 1. 首先,在您的项目中添加Feign依赖。可以在Maven或Gradle配置文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2. 创建一个Feign客户端接口,用于定义远程调用的方法。在该接口中,使用`@RequestMapping`注解定义远程服务的URL和请求方式,同时可以使用`@RequestHeader`注解设置请求头。 ```java @FeignClient(name = "团购服务", url = "http://团购服务的URL") public interface GroupBuyClient { @RequestMapping(method = RequestMethod.GET, value = "/groupbuy") String getGroupBuyInfo(@RequestHeader("Authorization") String token); } ``` 3. 在您的业务逻辑中,使用该Feign客户端接口进行远程调用Feign会自动处理请求和响应。 ```java @Autowired private GroupBuyClient groupBuyClient; public void performGroupBuyRequest() { String token = "your_token"; String groupBuyInfo = groupBuyClient.getGroupBuyInfo(token); // 处理响应结果 } ``` 在上述代码中,`getGroupBuyInfo`方法定义了一个GET请求,其中`@RequestHeader("Authorization")`注解设置了请求头的Authorization字段。您可以根据实际情况自定义请求头的内容。 请注意,上述代码仅为示例,实际使用时需要根据您的项目和接口定义进行相应的修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值