# 后端获取登录用户信息

// V2.0版本:
LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();

// V1.1版本:
SysUser sysUser = (SysUser)SecurityUtils.getSubject().getPrincipal();

# 数据权限配置不生效的原因(其一)

前端配置规则字段时,字段的名字应该是驼峰类型,而不是数据库原字段名

例:应使用sysOrgCode,而非sys_org_code

# Redis连接超时

现象是系统运行一段时间之后验证码请求返回redis链接错误,控制台输出io.lettuce.core.RedisCommandTimeoutException: Command timed out after 1 minute(s)

原因应该是因为redis的TCP keepalive检测超时断开了链接,也就是长时间客户端未请求redis造成链接断开了。

解决思路及方案:

编写定时任务持续保持redis的链接不中断即可

修改配置文件

redis:
  database: 0
  host: 127.0.0.1
  lettuce:
    pool:
      max-active: -1  #最大连接数据库连接数,设 -1 为没有限制
      max-idle: -1    #最大等待连接中的数量,设 -1 为没有限制
      max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
      min-idle: -1    #最小等待连接中的数量,设 -1 为没有限制
    shutdown-timeout: 100ms
  password: password
  port: 6379

添加Redis心跳链接方法

@Slf4j
@Component
@Configuration
@EnableScheduling
public class RedisHeartBeat {
    @Autowired
    private RedisTemplate redisTemplate;

    @Scheduled(cron = "0/10 * * * * *")
    public void timer() {
        redisTemplate.opsForValue().get("heartbeat");
    }
}

WARNING

此方法适用Jeecgboot,处理后观察一星期暂未再次发生该问题。搜索结果大部分建议切换回jedis,但部分反馈为此方法无效,且在Jeecgboot下修改量较大,还缺少必要的Bean,较为麻烦,故较为推荐使用定时心跳的办法进行处理。

# To Be Continued!😎

Last Updated: 10/9/2022, 9:09:26 AM