微服务接口内部调用注解

网关拦截器

将所有通过网关的接口进行加入请求头

@Component  
public class AuthFilter implements GlobalFilter, Ordered {  
    @Override  
    public Mono < Void > filter ( ServerWebExchange exchange, GatewayFilterChain chain ) {  
         return chain.filter(  
         exchange.mutate().request(  
         exchange.getRequest().mutate().header("id", "").header("from", "public").build())  
         .build()  
         )}  
  
    @Override  
    public int getOrder () {  
        return 0;  
    }  
 }  

注解

在方法上加注解

@Target({ElementType.METHOD})  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
public @interface OnlyIntranetAccess {  
}

aop

判断请求头中是否包含Public

@Aspect  
@Component  
@Slf4j  
public class OnlyIntranetAccessAspect {  
 @Pointcut ( "@within(org.openmmlab.platform.common.annotation.OnlyIntranetAccess)" )  
 public void onlyIntranetAccessOnClass () {}  
 @Pointcut ( "@annotation(org.openmmlab.platform.common.annotation.OnlyIntranetAccess)" )  
 public void onlyIntranetAccessOnMethed () {  
 }  
  
 @Before ( value = "onlyIntranetAccessOnMethed() || onlyIntranetAccessOnClass()" )  
 public void before () {  
     HttpServletRequest hsr = (( ServletRequestAttributes ) RequestContextHolder.getRequestAttributes()) .getRequest ();  
     String from = hsr.getHeader ( "from" );  
     if ( !StringUtils.isEmpty( from ) && "public".equals ( from )) {  
        log.error ( "This api is only allowed invoked by intranet source" );  
        throw new MMException ( ReturnEnum.C_NETWORK_INTERNET_ACCESS_NOT_ALLOWED_ERROR);  
            }  
     }  
 }  
  
@Target({ElementType.METHOD})  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
public @interface OnlyIntranetAccess {  
}  

使用

最后,在只能内网访问的接口上加上@OnlyIntranetAccess注解即可

@GetMapping ( "/role/add" )  
@OnlyIntranetAccess  
public String onlyIntranetAccess() {  
    return "该接口只允许内部服务调用";  
}

openFeign调用不走网关 所以请求头中的含有public的请求是来自于网关调用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值