RestTemplate的错误处理

在微服务架构中,网关通过RestTemplate调用鉴权服务进行鉴权。当鉴权服务返回401状态码时,RestTemplate会抛出HttpClientErrorException。这是因为RestTemplate的DefaultResponseErrorHandler接口默认将4xx状态码视为错误。为了解决这个问题,可以通过自定义ResponseErrorHandler或捕获异常来处理错误,并确保能获取到响应体内容。在网关场景下,可能需要针对页面跳转和REST API请求采取不同的错误处理策略。
摘要由CSDN通过智能技术生成

我们的项目属于微服务架构,两个基础的服务分别是网关和认证鉴权服务。
在前端访问后台服务的时候,都经过网关转发,转发之前会进行鉴权认证,根据鉴权结果判断是否可以进行相应的请求转发。

问题描述

认证鉴权服务中,判断Token对应的人员是否有相应的权限,如果没有权限,返回401状态码并在响应体中传回错误信息。
网关与鉴权服务之间的服务调用通过RestTemplate进行(可以考虑转为Feign做声明式的服务调用),然而如果鉴权服务返回401的情况下,网关服务直接报出HttpClientErrorException,让人一头雾水。
实际上,答案都在源码中,看一下RestTemplate的源码就知晓了。

ErrorHandler

在RestTemplate中,有一个成员变量ResponseErrorHandler。
ResponseErrorHandler是一个接口,包括两个方法:

public interface ResponseErrorHandler {
   
    boolean hasError(ClientHttpResponse var1) throws IOException;

    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值