sa-token-alone-redis 未实现 SSL/TLS 支持(TLS-only Redis 下连接被服务端直接关闭)
Author: ZackFair5185034Created Sep 14, 2026Updated Sep 14, 2026
使用版本
1.46.0(问题自 1.44.0 起持续存在,已逐一核对 1.44.0 / 1.45.0 / 1.46.0)
涉及的功能模块
sa-token-alone-redis
问题描述
sa-token-alone-redis 没有实现 SSL/TLS。当 Redis 服务端只开 tls-port(即 port 0,禁止明文)时,alone-redis 建立的明文连接会被服务端直接关闭,导致 sa-token 的登录态 / 权限缓存全部不可用。
根因:SaAloneRedisInject.setEnvironment() 自建 Lettuce 连接时只设置了 commandTimeout / shutdownTimeout / poolConfig,从未调用 useSsl() 或设置 sslOptions:
LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
builder.commandTimeout(cfg.getTimeout());
builder.shutdownTimeout(lettuce.getShutdownTimeout());
LettuceClientConfiguration clientConfig = builder.poolConfig(poolConfig).build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(redisAloneConfig, clientConfig);
factory.afterPropertiesSet();版本核对(1.44.0 / 1.45.0 / 1.46.0 该类字节码完全一致)
SaAloneRedisInject.class 的 SHA-256 三个版本完全相同,即两个版本间这段建连逻辑一行未改:
1.44.0 a727faf0dcd09fca83ede1c80d90ac742803d6236facc11550b9d2747976ace4
1.45.0 a727faf0dcd09fca83ede1c80d90ac742803d6236facc11550b9d2747976ace4
1.46.0 a727faf0dcd09fca83ede1c80d90ac742803d6236facc11550b9d2747976ace4一个容易误导的点
1.44.0 的 spring-configuration-metadata.json 里存在配置项 sa-token.alone-redis.ssl(类型 java.lang.Boolean),看起来像是有开关,但代码从不读取它 —— 它只是旧版 Spring Boot 里 RedisProperties.ssl 还是布尔值时的绑定产物。1.46.0 已移除该 metadata 文件。
现象
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to <host>/<unresolved>:6379
Caused by: io.lettuce.core.RedisConnectionException: Connection closed prematurely
at io.lettuce.core.protocol.RedisHandshakeHandler.channelInactive(RedisHandshakeHandler.java:76)注意这里没有嵌套 SSL 异常 —— 是服务端收到明文后干净断开,而不是握手失败。
期望
sa-token.alone-redis 支持 TLS,建议配置结构与 Spring Boot 保持一致:
sa-token:
alone-redis:
host: 127.0.0.1
port: 6379
password: xxx
database: 11
ssl:
enabled: true现状与参考
- 相关历史 issue:#373(2023,已关闭,给的是「自己调
SaTokenDaoForRedisTemplate#init(RedisConnectionFactory)/ 复制源码改」的 workaround) - 社区目前的通用做法确实是绕开这个插件:排除
SaAloneRedisInject,自行new SaTokenDaoForRedisTemplate()再init(自己的 TLS LettuceConnectionFactory)。这样能跑,但等于放弃这个插件本身。
希望能原生支持,谢谢!
Source: dromara/Sa-Token