|
|
|
@ -6,6 +6,7 @@ import cn.dev33.satoken.stp.parameter.SaLoginParameter; |
|
|
|
import cn.hutool.core.convert.Convert; |
|
|
|
import cn.hutool.http.useragent.UserAgent; |
|
|
|
import cn.hutool.http.useragent.UserAgentUtil; |
|
|
|
import cn.dev33.satoken.jwt.exception.SaJwtException; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.dromara.common.core.constant.CacheConstants; |
|
|
|
@ -81,10 +82,16 @@ public class UserActionListener implements SaTokenListener { |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void doLogout(String loginType, Object loginId, String tokenValue) { |
|
|
|
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY)); |
|
|
|
TenantHelper.dynamic(tenantId, () -> { |
|
|
|
try { |
|
|
|
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY)); |
|
|
|
TenantHelper.dynamic(tenantId, () -> { |
|
|
|
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); |
|
|
|
}); |
|
|
|
} catch (SaJwtException e) { |
|
|
|
// token已过期时直接删除缓存(不依赖租户隔离)
|
|
|
|
log.warn("doLogout时JWT已过期, 直接清理在线缓存, userId:{}", loginId); |
|
|
|
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); |
|
|
|
}); |
|
|
|
} |
|
|
|
log.info("user doLogout, userId:{}, token:{}", loginId, tokenValue); |
|
|
|
} |
|
|
|
|
|
|
|
@ -93,10 +100,15 @@ public class UserActionListener implements SaTokenListener { |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void doKickout(String loginType, Object loginId, String tokenValue) { |
|
|
|
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY)); |
|
|
|
TenantHelper.dynamic(tenantId, () -> { |
|
|
|
try { |
|
|
|
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY)); |
|
|
|
TenantHelper.dynamic(tenantId, () -> { |
|
|
|
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); |
|
|
|
}); |
|
|
|
} catch (SaJwtException e) { |
|
|
|
log.warn("doKickout时JWT已过期, 直接清理在线缓存, userId:{}", loginId); |
|
|
|
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); |
|
|
|
}); |
|
|
|
} |
|
|
|
log.info("user doKickout, userId:{}, token:{}", loginId, tokenValue); |
|
|
|
} |
|
|
|
|
|
|
|
@ -105,10 +117,15 @@ public class UserActionListener implements SaTokenListener { |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void doReplaced(String loginType, Object loginId, String tokenValue) { |
|
|
|
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY)); |
|
|
|
TenantHelper.dynamic(tenantId, () -> { |
|
|
|
try { |
|
|
|
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY)); |
|
|
|
TenantHelper.dynamic(tenantId, () -> { |
|
|
|
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); |
|
|
|
}); |
|
|
|
} catch (SaJwtException e) { |
|
|
|
log.warn("doReplaced时JWT已过期, 直接清理在线缓存, userId:{}", loginId); |
|
|
|
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); |
|
|
|
}); |
|
|
|
} |
|
|
|
log.info("user doReplaced, userId:{}, token:{}", loginId, tokenValue); |
|
|
|
} |
|
|
|
|
|
|
|
|