1. 新建微服务模块 test1
在 ruoyi-modules 目录下新建一个名为 test1 的 Maven 模块,参考现有模块(如 ruoyi-system)的目录结构和配置方式,完成基础搭建。
新建模块后,需要在 ruoyi-modules/pom.xml 中注册该子模块,并在 test1 的 pom.xml 中引入所需依赖,包括 ruoyi-common-security、ruoyi-common-log、ruoyi-common-swagger 等公共模块,以及 OpenFeign 相关依赖。
同时需要创建 test1 模块的启动类、配置文件(bootstrap.yml),并在 Nacos 中注册服务,确保服务能够正常启动并注册到注册中心。
2. OpenFeign 接口调用
2.1 修改 HeaderInterceptor 传递 Token
在 HeaderInterceptor 的 preHandler() 方法中增加 Token 传递逻辑,确保 Token 在服务调用期间不断传递:
java
// feign接口测试,增加token。可以让token在服务调用期间不断传
SecurityContextHolder.setToken(ServletUtils.getHeader(request, SecurityConstants.TOKEN));
其中 SecurityContextHolder 中的相关方法如下:
java
public static void setToken(String token) {
set(SecurityConstants.TOKEN, token);
}
public static String getToken() {
return get(SecurityConstants.TOKEN);
}
对应的常量定义:
java
/**
* TOKEN
*/
public static final String TOKEN = "Authorization";
2.2 新增 API 接口
在 RemoteUserService 中新增接口方法:
java
@GetMapping("/user/list")
public TableDataInfo getUserList(
@RequestHeader(SecurityConstants.DETAILS_USER_ID) Long userId,
@RequestHeader(SecurityConstants.DETAILS_USERNAME) String userName,
@RequestHeader(SecurityConstants.USER_KEY) String userKey,
@RequestHeader(SecurityConstants.TOKEN) String token
);
在 RemoteUserFallbackFactory 中新增对应的降级实现:
java
@Override
public TableDataInfo getUserList(Long userId, String userName, String userKey, String token) {
TableDataInfo tableDataInfo = new TableDataInfo();
tableDataInfo.setMsg("获取用户列表失败:" + throwable.getMessage());
return tableDataInfo;
}
注意:参数中的 TOKEN 用于鉴权中获取用户逻辑,其他三个参数仅用于演示。
2.3 test1 下新增测试 Controller
在 test1 模块中新增测试 Controller:
java
@RestController
@RequestMapping("/test")
public class SysTestController extends BaseController {
@Autowired
private RemoteUserService remoteUserService;
/**
获取当前用户信息
*/
@GetMapping("/getUserList")
public void info() {
TableDataInfo userList = remoteUserService
.getUserList(SecurityContextHolder.getUserId(),
SecurityContextHolder.getUserName(),
SecurityContextHolder.getUserKey(),
SecurityContextHolder.getToken());
System.out.println(JSON.toJSONString(userList));
}
}
3. 设置网关路由
进入 Nacos 中的 ruoyi-gateway-dev.yml 文件,新增如下路由配置:
yaml
# test1模块
- id: ruoyi-test1
uri: lb://ruoyi-test1
predicates:
- Path=/test/**
filters:
- StripPrefix=1
4. 测试验证
使用 Postman 新建 GET 请求:
localhost:8080/test/test/getUserList
报文头设置:
authorization=Bearer eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6Ijk3ZDczNjZlLTQ5MDgtNGNjZS1hZGZiLWI0YjI5N2RlZWQ3MiIsInVzZXJuYW1lIjoiYWRtaW4ifQ.GSfaRh77PR0wA0RbmGtqycRqRNr8IoX_JCkgqmpE-qwb3DrO2naKMK13Cyp8KoY7Cg-xvUYAH9AakgC7j0l3tw
其中 Token 值取自 admin 登录后的 Token。请求成功即表示服务间调用链路已打通。