介绍
概述
Pangea框架为了更好的服务于客户实现自身的业务,以声明式REST客户端(FeignClient)
的形式提供基础数据操作。
快速上手:
1、在需要使用FeignClient
的项目中引用以下依赖
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-client</artifactId>
</dependency>
2、注入FeignClient
根据业务系统自身所实现的业务逻辑,选择合适的FeignClient
(详见:公共FeginClient清单),然后将选择的FeignClient
注入到所在类中, 使之称为类的一个属性。以 UserClient
为例:
@Autowired
private UserClient userClient;
注意:框架提供所有的FeignClient
都在 com.hisense.pangea.client.*
路径下!
3、使用FeignClient
注入FeignClient
之后,便可以像调用Java普通函数一样调用接口,以UserClient.selectSysUserByUsername()
接口为例:
UserClient.selectSysUserByUsername()
的作用为根据用户账号查询用户信息。
public void testUserClient() {
//通过userClient.selectSysUserByUsername()接口获取用户数据
UserModel user = userClient.selectSysUserByUsername("admin");
//获取用户数据后在此进行业务逻辑实现
......
}
自定义FeignClient接口支持Oauth2认证
1、在需要使用FeignClient
的项目中引用以下依赖
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-client</artifactId>
</dependency>
2、在自定义的FeignClient
中配置configuration = FeignConfig.class
,以orgClient为例:
java
@FeignClient(name = ServiceNameConstants.PANGEA_DEMO, contextId = "orgClient",
fallbackFactory = OrgClientFallbackFactory.class,configuration = FeignConfig.class)
public interface OrgClient {
@GetMapping("org/{code}")
List<DemoModel> queryChildren(@PathVariable("code") String code);
}
这样,自定义的FeignClient将会原请求中headers的token,转移到FeignClient请求中, 从而支持Oauth2认证
注意: Oauth2认证是类级的,即对FeignClient中所有的接口生效。如使FeignClient中的某个接口不经过Oauth2认证,请参考FeignClient排除Oauth2认证
FeignClient排除Oauth2认证
场景:
当前FeignClient的调用方并不是由某个用户触发,而是由定时任务(例如xxl-job)触发,请求中没有和用户相关的token认证信息,从而无法支持Oauth2认证。
解决方案:
框架提供属性pangea.feign.ignore-uri
用于排除Oauth2认证,以UserClient
为例:
java
@FeignClient(name = ServiceNameConstants.PANGEA_DEMO, fallbackFactory = UserClientFallbackFactory.class)
public interface UserClient {
@GetMapping("/user/getByName")
List<DemoModel> getByName(@PathVariable("name") String name);
}
在UserClient调用方的yml配置文件中添加以下配置:
yaml
pangea:
feign:
ignore-uri:
- /user/getByName #此处填写@GetMapper中的路径
以上参数配置即可对getByName
接口排除Oauth2认证。pangea.feign.ignore-uri
属性支持路径模糊匹配,如遇到较多路径,参考以下配置:
yaml
pangea:
feign:
ignore-uri:
- /user/** #注意此处必须写'**',单个'*'将不起作用