背景
在测试环境我们应该有这种场景,如果我们知道有一个异常,和某个用户相关,那么希望拿到他的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));
}
在这段代码中打断点,就可以调试这个逻辑。