From db031fc2032084032aeb29311b770e84c1e6ade8 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期一, 20 一月 2025 18:05:44 +0800 Subject: [PATCH] 1 --- ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/AppUser.java | 72 ++++++++++++++ ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/UserController.java | 9 + ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java | 8 + ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java | 2 ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml | 4 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java | 17 +++ ruoyi-auth/pom.xml | 15 +++ ruoyi-ui/vue.config.js | 2 ruoyi-auth/src/main/java/com/ruoyi/auth/utils/SmsUtils.java | 36 +++++++ pom.xml | 18 +++ ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java | 56 ++++++++++- ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java | 6 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java | 3 ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml | 4 ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml | 4 15 files changed, 239 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index 94822a2..92f26fb 100644 --- a/pom.xml +++ b/pom.xml @@ -288,6 +288,24 @@ <version>${ruoyi.version}</version> </dependency> + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>dysmsapi20170525</artifactId> + <version>3.0.0</version> + </dependency> + + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>aliyun-java-sdk-core</artifactId> + <version>4.5.0</version> + </dependency> + + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>aliyun-java-sdk-dysmsapi</artifactId> + <version>2.1.0</version> + </dependency> + </dependencies> </dependencyManagement> diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java index 7f7221d..f8b68e0 100644 --- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java +++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java @@ -3,15 +3,17 @@ import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.factory.RemoteCompanyUserServiceFallbackFactory; import com.ruoyi.company.api.model.RegisterUser; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.*; @FeignClient(contextId = "remoteCompanyUserService", value = ServiceNameConstants.COMPANY_SERVICE, fallbackFactory = RemoteCompanyUserServiceFallbackFactory.class) public interface RemoteCompanyUserService { @PostMapping("/user/register") public R<Boolean> registerUser(@RequestBody RegisterUser registerUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + @GetMapping("/user/getUserByAccountName") + public R<User> getUserByAccountName(@RequestParam("accountName") String accountName, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java index 8c1b9e7..f8cb83d 100644 --- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java @@ -2,6 +2,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.company.api.RemoteCompanyUserService; +import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; import lombok.extern.log4j.Log4j2; import org.springframework.cloud.openfeign.FallbackFactory; @@ -21,6 +22,11 @@ public R<Boolean> registerUser(RegisterUser registerUser, String source) { return R.fail("用户注册失败:"+cause.getMessage()); } + + @Override + public R<User> getUserByAccountName(String accountName, String source) { + return R.fail("获取用户信息失败:"+cause.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/AppUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/AppUser.java new file mode 100644 index 0000000..706c123 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/AppUser.java @@ -0,0 +1,72 @@ +package com.ruoyi.system.api.model; + +import java.time.LocalDateTime; + +public class AppUser { + private Long userId; + + /** + * 用户唯一标识 + */ + private String token; + + /** 账号 */ + private String accountName; + + /** 手机号 */ + private String phone; + + /** 状态:1-激活 2-禁用 */ + private Integer status; + + /** 创建时间 */ + private LocalDateTime loginTime; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public LocalDateTime getLoginTime() { + return loginTime; + } + + public void setLoginTime(LocalDateTime loginTime) { + this.loginTime = loginTime; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java index ef266a0..5babaac 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java @@ -1,8 +1,9 @@ package com.ruoyi.system.api.model; +import com.ruoyi.system.api.domain.SysUser; + import java.io.Serializable; import java.util.Set; -import com.ruoyi.system.api.domain.SysUser; /** * 用户信息 diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml index da69cb9..e5763b8 100644 --- a/ruoyi-auth/pom.xml +++ b/ruoyi-auth/pom.xml @@ -63,6 +63,21 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> </dependency> + + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>dysmsapi20170525</artifactId> + </dependency> + + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>aliyun-java-sdk-core</artifactId> + </dependency> + + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>aliyun-java-sdk-dysmsapi</artifactId> + </dependency> </dependencies> diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index 53e7f52..149e560 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -2,10 +2,15 @@ import javax.servlet.http.HttpServletRequest; +import com.ruoyi.auth.utils.SmsUtils; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; +import com.ruoyi.system.api.model.AppUser; import io.swagger.v3.oas.annotations.Operation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; @@ -23,7 +28,12 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; + +import static com.alibaba.nacos.api.common.Constants.ACCESS_TOKEN; /** * token 控制 @@ -91,6 +101,7 @@ return R.ok(); } + /** * 发送短信验证码 */ @@ -103,16 +114,51 @@ String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + registerUser.getPhone(); redisService.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); // 发送验证码 TODO - + String result = SmsUtils.sendSms(registerUser.getPhone(), code); + if (!"OK".equals(result)) + { + return R.fail("验证码发送失败"); + } return R.ok(code); } @PostMapping("companyLogin") - public R<?> companyLogin(@RequestBody RegisterUser registerUser) + public R<Map<String, Object>> companyLogin(@RequestBody RegisterUser registerUser) { // 用户登录 - LoginUser userInfo = sysLoginService.login(registerUser.getPhone(), registerUser.getSmsCode()); - // 获取登录token - return R.ok(tokenService.createToken(userInfo)); + User user = sysLoginService.companyLogin(registerUser); + + String token = IdUtils.fastUUID(); + AppUser appUser = new AppUser(); + appUser.setUserId(user.getUserId()); + appUser.setAccountName(appUser.getAccountName()); + appUser.setPhone(appUser.getPhone()); + appUser.setLoginTime(LocalDateTime.now()); + appUser.setToken(token); + + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(appUser.getToken()); + redisService.setCacheObject(userKey, appUser, CacheConstants.EXPIRATION, TimeUnit.MINUTES); + + // Jwt存储信息 + Map<String, Object> claimsMap = new HashMap<String, Object>(); + claimsMap.put(SecurityConstants.USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, appUser.getUserId()); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, appUser.getAccountName()); + + // 接口返回信息 + Map<String, Object> rspMap = new HashMap<String, Object>(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", CacheConstants.EXPIRATION); + + return R.ok(rspMap); } + + + private String getTokenKey(String token) + { + return "login_tokens:" + token; + } + + } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java index 8a0b657..b237eba 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java @@ -6,6 +6,7 @@ import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; import lombok.RequiredArgsConstructor; +import org.jacoco.agent.rt.internal_43f5073.core.internal.flow.IFrame; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.core.constant.CacheConstants; @@ -186,7 +187,21 @@ } - public void companyLogin(RegisterUser registerUser) + public User companyLogin(RegisterUser registerUser) { + String accountName = registerUser.getAccountName(); + String password = registerUser.getPassword(); + + R<User> r = remoteCompanyUserService.getUserByAccountName(accountName, SecurityConstants.INNER); + if (R.isError(r)){ + throw new ServiceException(r.getMsg()); + } + if (r.getData() == null){ + throw new ServiceException("账号不存在"); + } + if (!SecurityUtils.matchesPassword(r.getData().getPassword(), password)){ + throw new ServiceException("密码错误"); + } + return r.getData(); } } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/utils/SmsUtils.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/utils/SmsUtils.java new file mode 100644 index 0000000..7689e11 --- /dev/null +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/utils/SmsUtils.java @@ -0,0 +1,36 @@ +package com.ruoyi.auth.utils; + +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.profile.DefaultProfile; + +public class SmsUtils { + public static String sendSms(String phoneNumber, String code) { + // 设置AccessKeyId、AccessKeySecret等信息 + String accessKeyId = "LTAI5tFSeci96NRF6p6UN69G"; + String accessKeySecret = "25t5zmWkueoQd81Zka70uPKRPgaMiV"; + + // 创建DefaultAcsClient实例并初始化 + DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); + IAcsClient client = new DefaultAcsClient(profile); + + // 创建并设置请求 + SendSmsRequest request = new SendSmsRequest(); + request.setPhoneNumbers(phoneNumber); // 必填: 要发送到的手机号码 + request.setSignName("供销云"); // 必填: 已经在阿里云上注册的短信签名 + request.setTemplateCode("SMS_311235421"); // 必填: 已经在阿里云上注册的短信模板CODE + request.setTemplateParam("{\"code\":\""+code+"\"}"); // 必填: 短信模板的变量参数 + + try { + // 发送短信并打印结果 + SendSmsResponse response = client.getAcsResponse(request); + return response.getCode(); + } catch (ClientException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java index c122e52..49f1ac3 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java @@ -16,6 +16,7 @@ * 用户名字段 */ public static final String DETAILS_USERNAME = "username"; + public static final String DETAILS_USERNAME2 = "username"; /** * 授权信息字段 @@ -36,6 +37,7 @@ * 用户标识 */ public static final String USER_KEY = "user_key"; + public static final String APP_USER_KEY = "app_user_key"; /** * 登录用户 diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/UserController.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/UserController.java index f6c8c92..40a128d 100644 --- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/UserController.java +++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/UserController.java @@ -1,6 +1,8 @@ package com.ruoyi.company.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; @@ -31,4 +33,11 @@ public R<UserDetail> getUserDetail(Long userId) { return R.ok(new UserDetail()); } + + @GetMapping("/getUserByAccountName") + @InnerAuth + public R<User> getUserByAccountName(String accountName) { + return R.ok(userService.getOne(new LambdaQueryWrapper<User>() + .eq(User::getAccountName,accountName))); + } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml index 64b9d91..8ca1ad7 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml @@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 - server-addr: 127.0.0.1:8848 + server-addr: 192.168.110.111:8848 config: # 配置中心地址 - server-addr: 127.0.0.1:8848 + server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml index 817a429..2cc4b44 100644 --- a/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml +++ b/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml @@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 - server-addr: 127.0.0.1:8848 + server-addr: 192.168.110.111:8848 config: # 配置中心地址 - server-addr: 127.0.0.1:8848 + server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js index 3451af1..a68ec25 100644 --- a/ruoyi-ui/vue.config.js +++ b/ruoyi-ui/vue.config.js @@ -36,7 +36,7 @@ proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { - target: `http://localhost:9000`, + target: `http://192.168.110.80:9000`, changeOrigin: true, pathRewrite: { ['^' + process.env.VUE_APP_BASE_API]: '' diff --git a/ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml b/ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml index 5bef22c..3c90887 100644 --- a/ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml +++ b/ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml @@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 - server-addr: 127.0.0.1:8848 + server-addr: 192.168.110.111:8848 config: # 配置中心地址 - server-addr: 127.0.0.1:8848 + server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 -- Gitblit v1.7.1