使用Dwsurvey中遇到的accountManager.getCurUser() 获取到user为空的问题解决

ok话不多咪
使用开源社区版Dwsurvey 遇到的问题
1.手机扫码填写问卷后使用admin管理员查看问卷详情报错,如图:
1

2

 排查后发现是 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;
}
7-result

 


2.SubmitSurveyAnswerCheckService.isAnswerPerm()方法将 User curUser = accountManager.getCurUser(); 替换为下面代码
String tokenStr = JwtUtils.getRequestToken(request);
User curUser = accountManager.getCurUserByRedis(tokenStr);

6-result

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

  



posted @ 2025-10-31 11:55  榴莲大王1+1  阅读(5)  评论(0)    收藏  举报