From 60cba101ed062ea720954de384cd773e14f34d44 Mon Sep 17 00:00:00 2001 From: Theo <971366405@qq.com> Date: Thu, 21 Nov 2024 23:21:15 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat(system):=20=E6=B7=BB=E5=8A=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B9=E8=BD=AF=E5=88=A0=E9=99=A4=E6=A0=87=E8=AF=86?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E9=80=9A=E7=9F=A5=E5=85=AC=E5=91=8A?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在创建配置项时添加软删除标识,避免直接物理删除 - 合并通知公告发布和撤回接口的映射方式,简化接口设计 --- .../com/youlai/boot/system/controller/NoticeController.java | 6 ++---- .../youlai/boot/system/service/impl/ConfigServiceImpl.java | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/youlai/boot/system/controller/NoticeController.java b/src/main/java/com/youlai/boot/system/controller/NoticeController.java index 31e57b1b..932db6aa 100644 --- a/src/main/java/com/youlai/boot/system/controller/NoticeController.java +++ b/src/main/java/com/youlai/boot/system/controller/NoticeController.java @@ -83,8 +83,7 @@ public class NoticeController { } @Operation(summary = "发布通知公告") - @PatchMapping(value = "/{id}/publish") - @PutMapping(value = "/{id}/publish") + @RequestMapping(value="/{id}/publish",method = {RequestMethod.PUT,RequestMethod.PATCH}) @PreAuthorize("@ss.hasPerm('sys:notice:publish')") public Result publishNotice( @Parameter(description = "通知公告ID") @PathVariable Long id @@ -94,8 +93,7 @@ public class NoticeController { } @Operation(summary = "撤回通知公告") - @PutMapping(value = "/{id}/revoke") - @PatchMapping(value = "/{id}/revoke") + @RequestMapping(value="/{id}/revoke",method = {RequestMethod.PUT,RequestMethod.PATCH}) @PreAuthorize("@ss.hasPerm('sys:notice:revoke')") public Result revokeNotice( @Parameter(description = "通知公告ID") @PathVariable Long id diff --git a/src/main/java/com/youlai/boot/system/service/impl/ConfigServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/ConfigServiceImpl.java index 76f149dd..90904347 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/ConfigServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/ConfigServiceImpl.java @@ -83,6 +83,7 @@ public class ConfigServiceImpl extends ServiceImpl impleme "配置键已存在"); Config config = configConverter.toEntity(configForm); config.setCreateBy(SecurityUtils.getUserId()); + config.setIsDeleted(0); return this.save(config); } From 3a9350c14a47f9c8152aa745a78b9572fa893c09 Mon Sep 17 00:00:00 2001 From: Theo <971366405@qq.com> Date: Sat, 23 Nov 2024 00:29:31 +0800 Subject: [PATCH 2/5] =?UTF-8?q?refactor(system):=20=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=88=B7=E6=96=B0=E6=8E=A5=E5=8F=A3=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20PATCH=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ConfigController 中更新 refreshCache 方法的映射 - 增加对 PUT 和 PATCH 方法的支持 --- .../com/youlai/boot/system/controller/ConfigController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/youlai/boot/system/controller/ConfigController.java b/src/main/java/com/youlai/boot/system/controller/ConfigController.java index 3ba45f80..28ac772f 100644 --- a/src/main/java/com/youlai/boot/system/controller/ConfigController.java +++ b/src/main/java/com/youlai/boot/system/controller/ConfigController.java @@ -57,7 +57,7 @@ public class ConfigController { } @Operation(summary = "刷新系统配置缓存") - @PutMapping(value = "/refresh") + @RequestMapping(value = "/refresh", method = {RequestMethod.PUT,RequestMethod.PATCH}) @PreAuthorize("@ss.hasPerm('sys:config:refresh')") public Result refreshCache() { return Result.judge(configService.refreshCache()); From d2f240776e247130850baa249fd6d744117dca93 Mon Sep 17 00:00:00 2001 From: Theo <971366405@qq.com> Date: Sun, 24 Nov 2024 01:32:45 +0800 Subject: [PATCH 3/5] =?UTF-8?q?refactor(system):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=A8=A1=E5=9D=97=E6=8E=A5=E5=8F=A3=E5=AE=9A?= =?UTF-8?q?=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 ConfigController 中的 refreshCache 方法和 NoticeController 中的 publishNotice 和 revokeNotice 方法的注解从 @RequestMapping 修改为 @PutMapping - 这样做可以更明确地指定 HTTP 请求方法,提高代码可读性和维护性 --- .../com/youlai/boot/system/controller/ConfigController.java | 2 +- .../com/youlai/boot/system/controller/NoticeController.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/youlai/boot/system/controller/ConfigController.java b/src/main/java/com/youlai/boot/system/controller/ConfigController.java index 28ac772f..174c9c3d 100644 --- a/src/main/java/com/youlai/boot/system/controller/ConfigController.java +++ b/src/main/java/com/youlai/boot/system/controller/ConfigController.java @@ -57,7 +57,7 @@ public class ConfigController { } @Operation(summary = "刷新系统配置缓存") - @RequestMapping(value = "/refresh", method = {RequestMethod.PUT,RequestMethod.PATCH}) + @PutMapping("/refresh") @PreAuthorize("@ss.hasPerm('sys:config:refresh')") public Result refreshCache() { return Result.judge(configService.refreshCache()); diff --git a/src/main/java/com/youlai/boot/system/controller/NoticeController.java b/src/main/java/com/youlai/boot/system/controller/NoticeController.java index 932db6aa..6a7111db 100644 --- a/src/main/java/com/youlai/boot/system/controller/NoticeController.java +++ b/src/main/java/com/youlai/boot/system/controller/NoticeController.java @@ -83,7 +83,7 @@ public class NoticeController { } @Operation(summary = "发布通知公告") - @RequestMapping(value="/{id}/publish",method = {RequestMethod.PUT,RequestMethod.PATCH}) + @PutMapping("/{id}/publish") @PreAuthorize("@ss.hasPerm('sys:notice:publish')") public Result publishNotice( @Parameter(description = "通知公告ID") @PathVariable Long id @@ -93,7 +93,7 @@ public class NoticeController { } @Operation(summary = "撤回通知公告") - @RequestMapping(value="/{id}/revoke",method = {RequestMethod.PUT,RequestMethod.PATCH}) + @PutMapping("/{id}/revoke") @PreAuthorize("@ss.hasPerm('sys:notice:revoke')") public Result revokeNotice( @Parameter(description = "通知公告ID") @PathVariable Long id From d24dafc1fbe6918cda9aa9d6c855390c2c20f789 Mon Sep 17 00:00:00 2001 From: wangtaocs Date: Fri, 29 Nov 2024 11:09:56 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E5=BE=AE=E4=BF=A1=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 9 +++ sql/mysql5/youlai_boot.sql | 1 + sql/mysql8/youlai_boot.sql | 1 + .../common/constant/SecurityConstants.java | 5 +- .../youlai/boot/config/SecurityConfig.java | 6 +- .../boot/config/WechatMiniAppConfig.java | 40 +++++++++++++ .../auth/controller/AuthController.java | 10 ++++ .../boot/shared/auth/service/AuthService.java | 7 +++ .../auth/service/impl/AuthServiceImpl.java | 57 +++++++++++++++++++ .../youlai/boot/system/model/entity/User.java | 5 ++ .../boot/system/model/form/UserForm.java | 3 + .../boot/system/service/UserService.java | 7 +++ .../system/service/impl/UserServiceImpl.java | 10 ++++ src/main/resources/application-dev.yml | 5 ++ 14 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java diff --git a/pom.xml b/pom.xml index 909da065..453c4a96 100644 --- a/pom.xml +++ b/pom.xml @@ -54,6 +54,9 @@ 4.6.4 2.2.1 + + + 4.5.5.B @@ -222,6 +225,12 @@ ${aliyun.java.sdk.dysmsapi.version} + + com.github.binarywang + weixin-java-miniapp + ${weixin-java.version} + + diff --git a/sql/mysql5/youlai_boot.sql b/sql/mysql5/youlai_boot.sql index 56a3c310..5b1370ab 100644 --- a/sql/mysql5/youlai_boot.sql +++ b/sql/mysql5/youlai_boot.sql @@ -405,6 +405,7 @@ CREATE TABLE `sys_user` ( `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `update_by` bigint NULL DEFAULT NULL COMMENT '修改人ID', `is_deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)', + `open_id` char(28) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '微信 openid', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `login_name`(`username` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; diff --git a/sql/mysql8/youlai_boot.sql b/sql/mysql8/youlai_boot.sql index 04328f58..ae78d1b7 100644 --- a/sql/mysql8/youlai_boot.sql +++ b/sql/mysql8/youlai_boot.sql @@ -367,6 +367,7 @@ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `update_by` bigint NULL DEFAULT NULL COMMENT '修改人ID', `is_deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)', + `open_id` char(28) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '微信 openid', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `login_name`(`username` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; diff --git a/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java b/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java index 3a3128b0..f254a1c2 100644 --- a/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java +++ b/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java @@ -35,5 +35,8 @@ public interface SecurityConstants { */ String JWT_TOKEN_PREFIX = "Bearer "; - + /** + * 微信登录路径 + */ + String WX_LOGIN_PATH = "/api/v1/auth/wechatLogin"; } diff --git a/src/main/java/com/youlai/boot/config/SecurityConfig.java b/src/main/java/com/youlai/boot/config/SecurityConfig.java index 98f12c3f..1bd314c3 100644 --- a/src/main/java/com/youlai/boot/config/SecurityConfig.java +++ b/src/main/java/com/youlai/boot/config/SecurityConfig.java @@ -54,7 +54,11 @@ public class SecurityConfig { http .authorizeHttpRequests(requestMatcherRegistry -> - requestMatcherRegistry.requestMatchers(SecurityConstants.LOGIN_PATH).permitAll() + requestMatcherRegistry + .requestMatchers( + SecurityConstants.LOGIN_PATH, + SecurityConstants.WX_LOGIN_PATH) + .permitAll() .anyRequest().authenticated() ) .exceptionHandling(httpSecurityExceptionHandlingConfigurer -> diff --git a/src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java b/src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java new file mode 100644 index 00000000..6268f512 --- /dev/null +++ b/src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java @@ -0,0 +1,40 @@ +package com.youlai.boot.config; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.config.WxMaConfig; +import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 配置微信 appId 和 appSecret + * @author wangtao + * @date 2024/11/26 17:28 + */ +@Setter +@ConfigurationProperties(prefix = "wechat.miniapp") +@Configuration +public class WechatMiniAppConfig { + + private String appId; + + private String appSecret; + + @Bean + public WxMaConfig wxMaConfig() { + WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); + config.setAppid(appId); + config.setSecret(appSecret); + return config; + } + + @Bean + public WxMaService wxMaService(WxMaConfig wxMaConfig) { + WxMaService service = new WxMaServiceImpl(); + service.setWxMaConfig(wxMaConfig); + return service; + } +} diff --git a/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java b/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java index 6defa625..8e649d3b 100644 --- a/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java +++ b/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java @@ -61,4 +61,14 @@ public class AuthController { AuthTokenResponse authTokenResponse = authService.refreshToken(request); return Result.success(authTokenResponse); } + + @Operation(summary = "微信登录") + @PostMapping("/wechatLogin") + @Log(value = "微信登录", module = LogModuleEnum.LOGIN) + public Result wechatLogin( + @Parameter(description = "微信授权码", example = "code") @RequestParam String code + ) { + AuthTokenResponse loginResult = authService.wechatLogin(code); + return Result.success(loginResult); + } } diff --git a/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java b/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java index ca462a54..80190226 100644 --- a/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java +++ b/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java @@ -40,4 +40,11 @@ public interface AuthService { * @return 登录结果 */ AuthTokenResponse refreshToken(RefreshTokenRequest request); + + /** + * 微信登录 + * @param code 微信登录code + * @return 登录结果 + */ + AuthTokenResponse wechatLogin(String code); } diff --git a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java b/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java index 5ef814a9..b831dbb5 100644 --- a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java @@ -1,11 +1,14 @@ package com.youlai.boot.shared.auth.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.hutool.captcha.AbstractCaptcha; import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.youlai.boot.common.constant.SecurityConstants; +import com.youlai.boot.common.constant.SystemConstants; import com.youlai.boot.common.exception.BusinessException; import com.youlai.boot.common.result.ResultCode; import com.youlai.boot.core.security.util.SecurityUtils; @@ -16,8 +19,12 @@ import com.youlai.boot.shared.auth.model.CaptchaResponse; import com.youlai.boot.shared.auth.model.AuthTokenResponse; import com.youlai.boot.config.property.CaptchaProperties; import com.youlai.boot.shared.auth.service.TokenService; +import com.youlai.boot.system.model.entity.User; +import com.youlai.boot.system.model.form.UserForm; +import com.youlai.boot.system.service.UserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -26,6 +33,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import java.awt.*; +import java.util.Objects; import java.util.concurrent.TimeUnit; /** @@ -45,6 +53,8 @@ public class AuthServiceImpl implements AuthService { private final Font captchaFont; private final CaptchaProperties captchaProperties; private final TokenService tokenService; + private final WxMaService wxMaService; + private final UserService userService; /** * 登录 @@ -148,4 +158,51 @@ public class AuthServiceImpl implements AuthService { return tokenService.refreshToken(refreshToken); } + @Override + public AuthTokenResponse wechatLogin(String code) { + // 1. 通过code获取微信access_token + WxMaJscode2SessionResult sessionInfo = null; + try { + sessionInfo = wxMaService.getUserService().getSessionInfo(code); + } catch (WxErrorException e) { + log.error("微信小程序登录失败", e); + throw new BusinessException(e); + } + + String openId = sessionInfo.getOpenid(); + if (StrUtil.isBlank(openId)) { + throw new BusinessException("微信授权失败"); + } + + // todo 获取微信用户信息 +// WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(sessionInfo.getSessionKey(), sessionInfo.getOpenid()); + + // 2. 根据openId查询用户信息,如果不存在则注册新用户 + User user = userService.getUserByOpenId(openId); + + if (Objects.isNull(user)) { + String name = "微信用户" + IdUtil.simpleUUID(); + UserForm newUser = new UserForm(); + newUser.setOpenId(openId); + newUser.setNickname(name); + newUser.setUsername(name); + boolean result = userService.saveUser(newUser); + if (!result) { + + throw new BusinessException("微信用户注册失败"); + } + } + user = userService.getUserByOpenId(openId); + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(user.getUsername().toLowerCase().trim(), SystemConstants.DEFAULT_PASSWORD); + // 执行用户认证 + Authentication authentication = authenticationManager.authenticate(authenticationToken); + // 认证成功后生成JWT令牌 + AuthTokenResponse authTokenResponse = tokenService.generateToken(authentication); + // 将认证信息存入Security上下文,便于在AOP(如日志记录)中获取当前用户信息 + SecurityContextHolder.getContext().setAuthentication(authentication); + // 返回包含JWT令牌的登录结果 + return authTokenResponse; + } + } diff --git a/src/main/java/com/youlai/boot/system/model/entity/User.java b/src/main/java/com/youlai/boot/system/model/entity/User.java index 62535380..71e74f7f 100644 --- a/src/main/java/com/youlai/boot/system/model/entity/User.java +++ b/src/main/java/com/youlai/boot/system/model/entity/User.java @@ -72,4 +72,9 @@ public class User extends BaseEntity { * 是否删除(0-否 1-是) */ private Integer isDeleted; + + /** + * 微信openid + */ + private String openId; } \ No newline at end of file diff --git a/src/main/java/com/youlai/boot/system/model/form/UserForm.java b/src/main/java/com/youlai/boot/system/model/form/UserForm.java index 8b48259a..8d4f8423 100644 --- a/src/main/java/com/youlai/boot/system/model/form/UserForm.java +++ b/src/main/java/com/youlai/boot/system/model/form/UserForm.java @@ -56,4 +56,7 @@ public class UserForm { @NotEmpty(message = "用户角色不能为空") private List roleIds; + @Schema(description="微信openId") + private String openId; + } diff --git a/src/main/java/com/youlai/boot/system/service/UserService.java b/src/main/java/com/youlai/boot/system/service/UserService.java index 9c083488..b2ced182 100644 --- a/src/main/java/com/youlai/boot/system/service/UserService.java +++ b/src/main/java/com/youlai/boot/system/service/UserService.java @@ -158,4 +158,11 @@ public interface UserService extends IService { * @return {@link List>} 用户选项列表 */ List> listUserOptions(); + + /** + * 根据openId获取用户信息 + * @param openId openId + * @return {@link User} + */ + User getUserByOpenId(String openId); } diff --git a/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java index 36da5402..ec323638 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java @@ -445,4 +445,14 @@ public class UserServiceImpl extends ServiceImpl implements Us } return Collections.emptyList(); } + + /** + * 根据openId获取用户信息 + * @param openId openId + * @return {@link User} + */ + @Override + public User getUserByOpenId(String openId) { + return this.getOne(new LambdaQueryWrapper().eq(User::getOpenId, openId)); + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index c4f6ea39..967c8102 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -214,3 +214,8 @@ captcha: # 验证码有效期(秒) expire-seconds: 120 +# 微信小程序 +wechat: + miniapp: + appId: xxxxxx + appSecret: xxxxxx \ No newline at end of file From f04e21e0e5ce8fed3960cc189b05739632f05fa4 Mon Sep 17 00:00:00 2001 From: wangtaocs Date: Fri, 29 Nov 2024 15:39:43 +0800 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=E5=BE=AE=E4=BF=A1=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=8A=9F=E8=83=BD=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/mysql5/youlai_boot.sql | 2 +- sql/mysql8/youlai_boot.sql | 2 +- .../youlai/boot/common/constant/SecurityConstants.java | 2 +- src/main/java/com/youlai/boot/config/SecurityConfig.java | 2 +- .../java/com/youlai/boot/config/WechatMiniAppConfig.java | 3 ++- .../boot/shared/auth/controller/AuthController.java | 2 +- .../com/youlai/boot/shared/auth/service/AuthService.java | 3 ++- .../boot/shared/auth/service/impl/AuthServiceImpl.java | 9 ++++++--- .../java/com/youlai/boot/system/service/UserService.java | 1 + .../youlai/boot/system/service/impl/UserServiceImpl.java | 1 + 10 files changed, 17 insertions(+), 10 deletions(-) diff --git a/sql/mysql5/youlai_boot.sql b/sql/mysql5/youlai_boot.sql index 5b1370ab..467d262f 100644 --- a/sql/mysql5/youlai_boot.sql +++ b/sql/mysql5/youlai_boot.sql @@ -405,7 +405,7 @@ CREATE TABLE `sys_user` ( `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `update_by` bigint NULL DEFAULT NULL COMMENT '修改人ID', `is_deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)', - `open_id` char(28) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '微信 openid', + `open_id` char(28) DEFAULT NULL COMMENT '微信 openid', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `login_name`(`username` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; diff --git a/sql/mysql8/youlai_boot.sql b/sql/mysql8/youlai_boot.sql index ae78d1b7..f1f0a09d 100644 --- a/sql/mysql8/youlai_boot.sql +++ b/sql/mysql8/youlai_boot.sql @@ -367,7 +367,7 @@ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `update_by` bigint NULL DEFAULT NULL COMMENT '修改人ID', `is_deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)', - `open_id` char(28) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '微信 openid', + `open_id` char(28) DEFAULT NULL COMMENT '微信 openid', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `login_name`(`username` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; diff --git a/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java b/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java index f254a1c2..5115cce4 100644 --- a/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java +++ b/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java @@ -38,5 +38,5 @@ public interface SecurityConstants { /** * 微信登录路径 */ - String WX_LOGIN_PATH = "/api/v1/auth/wechatLogin"; + String WECHAT_LOGIN_PATH = "/api/v1/auth/wechat-login"; } diff --git a/src/main/java/com/youlai/boot/config/SecurityConfig.java b/src/main/java/com/youlai/boot/config/SecurityConfig.java index 1bd314c3..e7955cd7 100644 --- a/src/main/java/com/youlai/boot/config/SecurityConfig.java +++ b/src/main/java/com/youlai/boot/config/SecurityConfig.java @@ -57,7 +57,7 @@ public class SecurityConfig { requestMatcherRegistry .requestMatchers( SecurityConstants.LOGIN_PATH, - SecurityConstants.WX_LOGIN_PATH) + SecurityConstants.WECHAT_LOGIN_PATH) .permitAll() .anyRequest().authenticated() ) diff --git a/src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java b/src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java index 6268f512..129186fd 100644 --- a/src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java +++ b/src/main/java/com/youlai/boot/config/WechatMiniAppConfig.java @@ -11,8 +11,9 @@ import org.springframework.context.annotation.Configuration; /** * 配置微信 appId 和 appSecret + * * @author wangtao - * @date 2024/11/26 17:28 + * @since 2024/11/26 17:28 */ @Setter @ConfigurationProperties(prefix = "wechat.miniapp") diff --git a/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java b/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java index 8e649d3b..091806d4 100644 --- a/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java +++ b/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java @@ -63,7 +63,7 @@ public class AuthController { } @Operation(summary = "微信登录") - @PostMapping("/wechatLogin") + @PostMapping("/wechat-login") @Log(value = "微信登录", module = LogModuleEnum.LOGIN) public Result wechatLogin( @Parameter(description = "微信授权码", example = "code") @RequestParam String code diff --git a/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java b/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java index 80190226..1a4215a4 100644 --- a/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java +++ b/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java @@ -42,7 +42,8 @@ public interface AuthService { AuthTokenResponse refreshToken(RefreshTokenRequest request); /** - * 微信登录 + * 微信小程序登录 + * * @param code 微信登录code * @return 登录结果 */ diff --git a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java b/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java index b831dbb5..54e7243b 100644 --- a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java @@ -158,6 +158,12 @@ public class AuthServiceImpl implements AuthService { return tokenService.refreshToken(refreshToken); } + /** + * 微信小程序登录 + * + * @param code 微信登录code + * @return 访问令牌 + */ @Override public AuthTokenResponse wechatLogin(String code) { // 1. 通过code获取微信access_token @@ -179,7 +185,6 @@ public class AuthServiceImpl implements AuthService { // 2. 根据openId查询用户信息,如果不存在则注册新用户 User user = userService.getUserByOpenId(openId); - if (Objects.isNull(user)) { String name = "微信用户" + IdUtil.simpleUUID(); UserForm newUser = new UserForm(); @@ -188,11 +193,9 @@ public class AuthServiceImpl implements AuthService { newUser.setUsername(name); boolean result = userService.saveUser(newUser); if (!result) { - throw new BusinessException("微信用户注册失败"); } } - user = userService.getUserByOpenId(openId); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUsername().toLowerCase().trim(), SystemConstants.DEFAULT_PASSWORD); // 执行用户认证 diff --git a/src/main/java/com/youlai/boot/system/service/UserService.java b/src/main/java/com/youlai/boot/system/service/UserService.java index b2ced182..f9be4bdb 100644 --- a/src/main/java/com/youlai/boot/system/service/UserService.java +++ b/src/main/java/com/youlai/boot/system/service/UserService.java @@ -161,6 +161,7 @@ public interface UserService extends IService { /** * 根据openId获取用户信息 + * * @param openId openId * @return {@link User} */ diff --git a/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java index ec323638..7e20540b 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java @@ -448,6 +448,7 @@ public class UserServiceImpl extends ServiceImpl implements Us /** * 根据openId获取用户信息 + * * @param openId openId * @return {@link User} */