From 2ca169c85f61256fb5185c078dba1bfef2be5066 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期三, 11 六月 2025 22:34:11 +0800 Subject: [PATCH] 小程序鉴权处理 --- framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java | 7 +++ framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java | 5 ++ framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java | 15 ++++--- seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java | 12 ++++++ framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java | 23 ++++++++--- seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java | 18 +++++---- buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java | 3 + framework/src/main/java/cn/lili/modules/member/service/MemberService.java | 2 + framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java | 10 ++++ 9 files changed, 70 insertions(+), 25 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java index 7d81a2f..d1e2df7 100644 --- a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java +++ b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java @@ -99,7 +99,8 @@ AuthUser authUser = new Gson().fromJson(json, AuthUser.class); //鏍¢獙redis涓槸鍚︽湁鏉冮檺 - if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER,authUser.getId()) + jwt)) { + if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER, authUser.getId()) + jwt) || + cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.STORE, authUser.getId()) + jwt)) { //鏋勯�犺繑鍥炰俊鎭� List<GrantedAuthority> auths = new ArrayList<>(); auths.add(new SimpleGrantedAuthority("ROLE_" + authUser.getRole().name())); diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java index eac79b1..6758887 100644 --- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java @@ -265,6 +265,11 @@ if (StrUtil.isNotBlank(authUser.getPhone())) { member = memberService.findByMobile(authUser.getPhone()); } + + if (StrUtil.isNotBlank(authUser.getUuid())) { + member = memberService.findByUUID(authUser.getUuid()); + } + //濡傛灉鏈煡鍒版墜鏈哄彿鐨勪細鍛樺垯浣跨敤绗笁鏂圭櫥褰� if (member == null) { LambdaQueryWrapper<Connect> queryWrapper = new LambdaQueryWrapper<Connect>(); diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java index 8027050..83bb664 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java @@ -5,6 +5,7 @@ import cn.lili.common.security.sensitive.enums.SensitiveStrategy; import cn.lili.common.utils.CommonUtil; import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -80,6 +81,10 @@ @ApiModelProperty(value = "搴楅摵ID") private String storeId; + @ApiModelProperty(value = "uuId") + @TableField(value = "uu_id") + private String uuId; + /** * @see ClientTypeEnum */ @@ -111,7 +116,7 @@ this.lastLoginDate = new Date(); } - public Member(String username, String password, String face, String nickName, Integer sex,String mobile) { + public Member(String username, String password, String face, String nickName, Integer sex, String mobile) { this.username = username; this.password = password; this.mobile = mobile; diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java index f818a52..20983da 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java @@ -336,4 +336,6 @@ boolean appSConfirm(String token, Integer code); QRLoginResultVo loginWithSession(String token); + + Member findByUUID(String uuid); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index bc00f42..5cf289a 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -257,6 +257,7 @@ Member member = new Member(authUser.getUsername(), UuidUtils.getUUID(), authUser.getAvatar(), authUser.getNickname(), authUser.getGender() != null ? Convert.toInt(authUser.getGender().getCode()) : 0, authUser.getPhone()); member.setPassword(DEFAULT_PASSWORD); + member.setUuId(authUser.getUuid()); // 鍙戦�佷細鍛樻敞鍐屼俊鎭� registerHandler(member); @@ -501,18 +502,19 @@ this.updateById(member); return member; } + @Override - public Result resetPassword(String id){ - String password = "123456"; - Member member = this.getById(id); - member.setPassword(new BCryptPasswordEncoder().encode(password)); - this.updateById(member); - return Result.ok("閲嶇疆鎴愬姛"); + public Result resetPassword(String id) { + String password = "123456"; + Member member = this.getById(id); + member.setPassword(new BCryptPasswordEncoder().encode(password)); + this.updateById(member); + return Result.ok("閲嶇疆鎴愬姛"); } @Override - public Member updateMemberPartProperties(String id,String password,String mobile) { + public Member updateMemberPartProperties(String id, String password, String mobile) { //鏌ヨ浼氬憳淇℃伅 Member member = this.getById(id); member.setMobile(mobile); @@ -861,6 +863,13 @@ return result; } + @Override + public Member findByUUID(String uuid) { + QueryWrapper<Member> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("uu_id", uuid); + return this.baseMapper.selectOne(queryWrapper); + } + /** * 妫�娴嬩細鍛� * diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java index ed26a22..f84a49b 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreMenuRoleServiceImpl.java @@ -48,13 +48,14 @@ @Override public List<StoreUserMenuVO> findAllMenu(String clerkId, String memberId) { - String cacheKey = CachePrefix.STORE_USER_MENU.getPrefix() + memberId; - List<StoreUserMenuVO> menuList = (List<StoreUserMenuVO>) cache.get(cacheKey); - if (menuList == null || menuList.isEmpty()) { - menuList = storeMenuService.getUserRoleMenu(clerkId); - cache.put(cacheKey, menuList); - } - return menuList; +// String cacheKey = CachePrefix.STORE_USER_MENU.getPrefix() + memberId; +// List<StoreUserMenuVO> menuList = (List<StoreUserMenuVO>) cache.get(cacheKey); +// if (menuList == null || menuList.isEmpty()) { +// menuList = storeMenuService.getUserRoleMenu(clerkId); +// cache.put(cacheKey, menuList); +// } +// return menuList; + return storeMenuService.getUserRoleMenu(clerkId); } diff --git a/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java b/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java index ad5e008..4df5d43 100644 --- a/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java +++ b/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java @@ -8,7 +8,9 @@ import cn.lili.common.security.token.Token; import cn.lili.common.security.token.TokenUtil; import cn.lili.common.security.token.base.AbstractTokenGenerate; +import cn.lili.modules.member.entity.dos.Clerk; import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.member.service.ClerkService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MemberTagsEnum; import org.apache.rocketmq.spring.core.RocketMQTemplate; @@ -34,6 +36,9 @@ @Autowired private RocketMQTemplate rocketMQTemplate; + @Autowired + private ClerkService clerkService; + @Override public Token createToken(Member member, Boolean longTerm) { @@ -57,11 +62,14 @@ String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_LOGIN.name(); rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback()); + Clerk clerk = clerkService.getClerkByMemberId(member.getId()); + AuthUser authUser = AuthUser.builder() .username(member.getUsername()) .face(member.getFace()) .id(member.getId()) - .role(UserEnums.MEMBER) + .role(clerk == null ? UserEnums.MEMBER : UserEnums.STORE) + .storeId(clerk == null ? null : clerk.getStoreId()) .nickName(member.getNickName()) .longTerm(longTerm) .build(); diff --git a/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java index 362d46b..04efa8a 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/CategoryStoreController.java @@ -1,12 +1,16 @@ package cn.lili.controller.goods; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; +import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.vos.CategoryBrandVO; import cn.lili.modules.goods.entity.vos.CategoryVO; import cn.lili.modules.goods.service.CategoryBrandService; import cn.lili.modules.goods.service.CategoryService; +import cn.lili.modules.member.entity.dos.Clerk; +import cn.lili.modules.member.service.ClerkService; import cn.lili.modules.store.service.StoreDetailService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -49,11 +53,19 @@ */ @Autowired private StoreDetailService storeDetailService; + @Autowired + private ClerkService clerkService; @ApiOperation(value = "鑾峰彇搴楅摵缁忚惀鐨勫垎绫�") @GetMapping(value = "/all") public ResultMessage<List<CategoryVO>> getListAll() { + String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); + if (StringUtils.isEmpty(storeId)) { + Clerk clerk = clerkService.getClerkByMemberId(UserContext.getCurrentUserId()); + storeId = clerk.getStoreId(); + } + //鑾峰彇搴楅摵缁忚惀鑼冨洿 String goodsManagementCategory = storeDetailService.getStoreDetail(storeId).getGoodsManagementCategory(); return ResultUtil.data(this.categoryService.getStoreCategory(goodsManagementCategory.split(","))); diff --git a/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java b/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java index 816d74b..8302055 100644 --- a/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java +++ b/seller-api/src/main/java/cn/lili/security/StoreAuthenticationFilter.java @@ -106,7 +106,9 @@ AuthUser authUser = new Gson().fromJson(json, AuthUser.class); //鏍¢獙redis涓槸鍚︽湁鏉冮檺 - if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.STORE, authUser.getId()) + jwt)) { + if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER, authUser.getId()) + jwt) || + cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.STORE, authUser.getId()) + jwt) + ) { //鐢ㄦ埛瑙掕壊 List<GrantedAuthority> auths = new ArrayList<>(); auths.add(new SimpleGrantedAuthority("ROLE_" + authUser.getRole().name())); @@ -145,14 +147,14 @@ //鑾峰彇缂撳瓨涓殑鏉冮檺 Map<String, List<String>> permission = (Map<String, List<String>>) cache.get(permissionCacheKey); - if (permission == null || permission.isEmpty()) { - //鏍规嵁浼氬憳id鏌ヨ搴楀憳淇℃伅 - Clerk clerk = clerkService.getClerkByMemberId(authUser.getId()); - if (clerk != null) { - permission = storeTokenGenerate.permissionList(storeMenuRoleService.findAllMenu(clerk.getId(), authUser.getId())); - cache.put(permissionCacheKey, permission); - } + // if (permission == null || permission.isEmpty()) { + //鏍规嵁浼氬憳id鏌ヨ搴楀憳淇℃伅 + Clerk clerk = clerkService.getClerkByMemberId(authUser.getId()); + if (clerk != null) { + permission = storeTokenGenerate.permissionList(storeMenuRoleService.findAllMenu(clerk.getId(), authUser.getId())); + cache.put(permissionCacheKey, permission); } + //} //鑾峰彇鏁版嵁(GET 璇锋眰)鏉冮檺 if (request.getMethod().equals(RequestMethod.GET.name())) { //濡傛灉鐢ㄦ埛鐨勮秴绾ф潈闄愬拰鏌ラ槄鏉冮檺閮戒笉鍖呭惈褰撳墠璇锋眰鐨刟pi -- Gitblit v1.8.0