image.png

** RestTemplate 介绍 **

RestTemplate 是 spring 框架中自带的 rest 客户端工具类,具有丰富的 API,并且在 spring cloud 中,标记 @LoadBalanced 注解,可以实现客户端负载均衡的 rest 调用。

思路

RestTemplate 虽然提供了丰富的API,但是这些API 过于底层,如果不稍加控制,让开发人员随意使用,那后续的代码也将会变的五花八门,难以维护。

同时,当系统规模大了之后,将会有更多的服务,并且服务之间的调用关系也将更加复杂,如果不进行管控治理的话,同样,项目同期也将越来越不可控

最后,服务间调用也需要有明确的权限认证机制,最好是能通过配置的方式来明确,哪些服务可以调用那些服务,从而来把控项目的复杂度。

本文将从以下几点来提供一个解决问题的思路:

• 通过spring boot 的@ConfigurationProperties机制来定义远程服务的元数据,从而实现权限认证的配置化

• 使用 HandlerInterceptor 来进行拦截,实现权限的验证

• 定义通用 Rms 类,来规范 RestTemplate 的使用

**实现 **

1.实现权限配置

►1.定义 Application 元数据

image.png

►2.定义 Service 元数据

image.png

► 3.定义 RmsProperties 类

image.png

►4.在 properties 文件中进行配置

image.png

2.实现权限校验

►1.定义 RmsAuthHandlerInterceptor 拦截器

image.png

►2.完善 preHandle 方法-取出认证信息

image.png

►3.完善 preHandle 方法-校验

image.png

►4.定义 RmsConfig 类

image.png

►5.定义 RmsConfig 类-注册 bean

image.png

►6.在 properties 文件中进行配置

image.png

3.实现 Rms 类

►1.定义 rms 类

image.png

►2.定义 rms 类-call 方法

image.png

►3.定义 rms 类-其他方法

image.png

►4.客户端调用

image.png

结束

这样,规范了远程服务的调用,只关心接口编号和接口的入参和出参,能够增加沟通效率,并且也有了轻量级的服务治理机制,服务间的调用更可控,到最后,配置文件一拉出来一清二楚.

https://mp.weixin.qq.com/s/-HPOaG8z_v0EcwBkJ2d7hQ