# 后端获取登录用户信息
// 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,较为麻烦,故较为推荐使用定时心跳的办法进行处理。