Skip to content

介绍

概述

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/**  #注意此处必须写'**',单个'*'将不起作用