From 6da20bdac47081c5d6798ea8bf92963e64212067 Mon Sep 17 00:00:00 2001 From: ayi <2294931964@qq.com> Date: Mon, 2 Feb 2026 18:28:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E8=A7=92=E8=89=B2=E5=88=B0=E7=BC=93=E5=AD=98=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2Key?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/constant/RedisKeyConstants.java | 6 ++--- .../domain/mappers/UserRoleRelMapper.java | 3 +++ .../domain/mappings/UserRoleRelMapping.xml | 3 +++ .../auth/service/impl/UserServiceImpl.java | 24 +++++++++++++++++-- xiaoyi-gateway/pom.xml | 4 ++++ .../xiaoyi/gateway/auth/SaTokenConfigure.java | 1 + .../xiaoyi/gateway/auth/StpInterfaceImpl.java | 8 +++++-- 7 files changed, 42 insertions(+), 7 deletions(-) diff --git a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/constant/RedisKeyConstants.java b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/constant/RedisKeyConstants.java index 0e2d5fc..810a1c3 100644 --- a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/constant/RedisKeyConstants.java +++ b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/constant/RedisKeyConstants.java @@ -48,11 +48,11 @@ public class RedisKeyConstants { /** * 构建用户角色数据 KEY * - * @param phone 用户手机号 + * @param userId 用户手机号 * @return 用户角色数据 KEY */ - public static String buildUserRolesKey(String phone) { - return USER_ROLES_KEY_PREFIX + phone; + public static String buildUserRolesKey(Long userId) { + return USER_ROLES_KEY_PREFIX + userId; } /** diff --git a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappers/UserRoleRelMapper.java b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappers/UserRoleRelMapper.java index d336bcf..971104c 100644 --- a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappers/UserRoleRelMapper.java +++ b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappers/UserRoleRelMapper.java @@ -3,6 +3,8 @@ package top.crushtj.xiaoyi.auth.domain.mappers; import top.crushtj.xiaoyi.auth.domain.entity.UserRoleRelEntity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; + /** * @author ayi * @version V1.0 @@ -12,5 +14,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface UserRoleRelMapper extends BaseMapper { + List selectByUserId(Long userId); } diff --git a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappings/UserRoleRelMapping.xml b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappings/UserRoleRelMapping.xml index 83a45a8..d43332c 100644 --- a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappings/UserRoleRelMapping.xml +++ b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/domain/mappings/UserRoleRelMapping.xml @@ -10,5 +10,8 @@ + diff --git a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/service/impl/UserServiceImpl.java b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/service/impl/UserServiceImpl.java index 0f811df..b526940 100644 --- a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/service/impl/UserServiceImpl.java +++ b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyi/auth/service/impl/UserServiceImpl.java @@ -4,7 +4,6 @@ import cn.dev33.satoken.stp.SaTokenInfo; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.base.Preconditions; - import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -103,6 +102,7 @@ public class UserServiceImpl extends ServiceImpl impleme } else { // 已注册,则获取其用户 ID userId = userEntity.getId(); + this.loadUserRole(userId); } } } @@ -115,6 +115,12 @@ public class UserServiceImpl extends ServiceImpl impleme return Response.success(tokenInfo.tokenValue); } + /** + * 用户注册 + * + * @param phone 手机号 + * @return 用户ID + */ private Long registerUser(String phone) { return transactionTemplate.execute(status -> { try { @@ -150,7 +156,7 @@ public class UserServiceImpl extends ServiceImpl impleme // 将用户角色信息存储到 Redis 中 List roles = new ArrayList<>(); roles.add(COMMON_USER_ROLE_ID); - String userRolesKey = RedisKeyConstants.buildUserRolesKey(phone); + String userRolesKey = RedisKeyConstants.buildUserRolesKey(userId); redisTemplate.opsForValue() .set(userRolesKey, JsonUtils.toJsonString(roles)); return userId; @@ -171,5 +177,19 @@ public class UserServiceImpl extends ServiceImpl impleme return null; }); } + + /** + * 加载用户角色信息到缓存 + * + * @param userId 用户ID + */ + private void loadUserRole(Long userId) { + String userRolesKey = RedisKeyConstants.buildUserRolesKey(userId); + Boolean hasKey = redisTemplate.hasKey(userRolesKey); + if (!hasKey) { + List roles = userRoleRelMapper.selectByUserId(userId); + redisTemplate.opsForValue().set(userRolesKey,JsonUtils.toJsonString(roles)); + } + } } diff --git a/xiaoyi-gateway/pom.xml b/xiaoyi-gateway/pom.xml index 937971b..a31a5ff 100644 --- a/xiaoyi-gateway/pom.xml +++ b/xiaoyi-gateway/pom.xml @@ -14,6 +14,10 @@ 网关服务 + + top.crushtj + xiaoyi-common + org.springframework.cloud spring-cloud-starter-bootstrap diff --git a/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/SaTokenConfigure.java b/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/SaTokenConfigure.java index 92f2d30..79edfdd 100644 --- a/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/SaTokenConfigure.java +++ b/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/SaTokenConfigure.java @@ -32,6 +32,7 @@ public class SaTokenConfigure { .check(r -> StpUtil.checkLogin()) // 校验是否登录 ; + SaRouter.match("/auth/user/logout", r -> StpUtil.checkPermission("user")); // 权限认证 -- 不同模块, 校验不同权限 // SaRouter.match("/user/**", r -> StpUtil.checkPermission("user")); // SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin")); diff --git a/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/StpInterfaceImpl.java b/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/StpInterfaceImpl.java index 501dc86..3ffca72 100644 --- a/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/StpInterfaceImpl.java +++ b/xiaoyi-gateway/src/main/java/top/crushtj/xiaoyi/gateway/auth/StpInterfaceImpl.java @@ -1,6 +1,7 @@ package top.crushtj.xiaoyi.gateway.auth; import cn.dev33.satoken.stp.StpInterface; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.List; @@ -13,15 +14,18 @@ import java.util.List; * @description 自定义权限验证接口 */ +@Slf4j @Component public class StpInterfaceImpl implements StpInterface { @Override - public List getPermissionList(Object o, String s) { + public List getPermissionList(Object loginId, String loginType) { + log.info("## 获取用户权限列表, loginId: {}", loginId); return List.of(); } @Override - public List getRoleList(Object o, String s) { + public List getRoleList(Object loginId, String loginType) { + log.info("## 获取用户角色列表, loginId: {}", loginId); return List.of(); } }