【ruoyi-vue-pro】在测试环境如何通过用户ID进行测试

95 阅读1分钟

背景

在测试环境我们应该有这种场景,如果我们知道有一个异常,和某个用户相关,那么希望拿到他的token,然后携带这个token去请求发生异常的接口。这个比较麻烦的点在于,你要去求那个登录的用户,去ta浏览器里面拿到token。这样明显不方便。ruoyi-vue-pro考虑了这个问题,使之可以在测试环境直接携带用户ID就可以访问接口。同时不影响正常的用户安全。

操作

首先要进行配置

security:
#允许模拟用户,如果为false,这个功能就没有用
  mock-enable: true
  # mock密钥
  mock-secret: test

这两个配置好了之后,就可以启动服务器。

这个时候只要自己的请求的请求头中带有

Authorization=Bearer {用户的主键id}

就可以进行请求的模拟。 这个{用户的主键id}需要自己替换,去数据库查。

原理

在TokenAuthenticationFilter过滤器中有一段这样的代码:

/**
 * 模拟登录用户,方便日常开发调试
 *
 * 注意,在线上环境下,一定要关闭该功能!!!
 *
 * @param request 请求
 * @param token 模拟的 token,格式为 {@link SecurityProperties#getMockSecret()} + 用户编号
 * @param userType 用户类型
 * @return 模拟的 LoginUser
 */
private LoginUser mockLoginUser(HttpServletRequest request, String token, Integer userType) {
    if (!securityProperties.getMockEnable()) {
        return null;
    }
    // 必须以 mockSecret 开头
    if (!token.startsWith(securityProperties.getMockSecret())) {
        return null;
    }
    // 构建模拟用户
    Long userId = Long.valueOf(token.substring(securityProperties.getMockSecret().length()));
    return new LoginUser().setId(userId).setUserType(userType)
            .setTenantId(WebFrameworkUtils.getTenantId(request));
}

在这段代码中打断点,就可以调试这个逻辑。