使用Dwsurvey中遇到的accountManager.getCurUser() 获取到user为空的问题解决
ok话不多咪
使用开源社区版Dwsurvey 遇到的问题
1.手机扫码填写问卷后使用admin管理员查看问卷详情报错,如图:
使用开源社区版Dwsurvey 遇到的问题
1.手机扫码填写问卷后使用admin管理员查看问卷详情报错,如图:

排查后发现是 accountManager.getCurUser() ,Object principal=subject.getPrincipal(); 为空,导致拿不到当前用户信息
接口url前缀为 :/api/dwsurvey/none/
排查shiroConfig /api/dwsurvey/none 接口没有通过认证,所以会少token
后面在shiroConfig中 对/api/dwsurvey/none 接口加上jwt认证后 ,管理员访问没问题了,但用户端进不来,一致转圈圈,此路不通,找调问社区技术支持,得到了下面的回答。
解决:
1.AccountManager 增加从redis获取用户信息方法
@Autowired
private RedisManager redisManager;
public User getCurUserByRedis(String tokenStr) {
Object redisTokenObj = redisManager.get(JwtUtils.REDIS_STORE_PREFIX + tokenStr);
if (redisTokenObj != null) {
User user = (User) redisTokenObj;
return user;
}
return null;
}
2.SubmitSurveyAnswerCheckService.isAnswerPerm()方法将 User curUser = accountManager.getCurUser(); 替换为下面代码
String tokenStr = JwtUtils.getRequestToken(request); User curUser = accountManager.getCurUserByRedis(tokenStr);

ok本地测试通过
ps:
问了一嘴:这块代码需要认证,是不是放在 /api/dwsurvey/app/v6/dw-design-survey 这个路径下更好一些,就不用多加这块代码?
答: ,不行,也有非登录场景可能
ok,就酱紫

浙公网安备 33010602011771号