feign调用走不走网关全局拦截_服务之间调用还需要鉴权?

本文介绍了在微服务架构中,如何实现Feign服务间调用时不走网关全局鉴权。通过自定义注解`@Inner`,结合AOP处理,以及在资源服务器中配置暴露特定接口,实现服务间调用的安全性和灵活性。同时,文章讨论了安全性考虑,如在网关层清洗请求头防止未授权访问。
摘要由CSDN通过智能技术生成

一、com.cn/tag/%e8%83%8c%e6%99%af" target="_blank">背景

一般在微服务架构中我们都会使用spring security oauth2来进行权限控制,我们将资源服务全部放在内网环境中,将API网关暴露在公网上,公网如果想要访问我们的资源必须经过API网关进行鉴权,鉴权通过后再访问我们的资源2 D ^ Z @ t d Q服务。我们根据如下图片来分析一下问题。

现在我们F p 2 3 i有三个服务:分别是用户服务、f 7 Y H ^ T订单服务和产品服务。用户如果购买产品,则需要调用产品服务生成订单,那么我们在这个调用过程中有必要鉴权j B a = 4吗?答案是否} j & Z d定的,因为这些资源服务放在内S $ } S # . 3网环境中,完全不用考虑安全问题。

二、思路

如果要想实现这个功能,我们则需要来区分这两种请求,来自网关的请求进行鉴权,而服务间的请求则直接调用。

是否可以给接口增加一个参数来标记它是服务间调用的请求?

这样虽然可以实现两种请求的区分,但是实际中不会这么做。在 Spring Cloud Alibaba系列(三)使用feign进行服务调用 中曾提到了实现feign的两种方式,一般情况下服务间调用和网关请求的数据接口是同一个接口,如果写成两个接口来分别给两种请求调用,这样无疑增加了大量重复代码。也就是说我们一般不会通过改变请求参数的个数来实现这两种服务的区分。

虽然不能增加请求F t D Y 6 _ ( U $的参数个数来区分,但是我们可以给请求的headerQ l = c p R中添加一个参数n w t m | E P用来区分R j w c + k f O。这样完全可以避免上面提到的问题。

三、实现

3.1 自定义注解

我们自定义一个Innder的注解,然后利用aop对这个5 r ^ R (注解进行处理

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

p9 _ Gublic @interface Inner {

/**

* 是否AOP统一处理

*/

boolean value() default true;

}

@Aspect

@Component

public class InnerAspect implements Ordered {

private final Logger log6 F i g 3 L ? = LoggerFactory.getLogger(InI D W : 1 #nerAspect.class);

@Around("@annotatX F L X - rion(in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值