1
luodangjia
2025-01-20 db031fc2032084032aeb29311b770e84c1e6ade8
1
13个文件已修改
2个文件已添加
256 ■■■■■ 已修改文件
pom.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/AppUser.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/pom.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/utils/SmsUtils.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/UserController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/vue.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
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);
}
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());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/AppUser.java
New file
@@ -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;
    }
}
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;
/**
 * 用户信息
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>
    
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;
    }
}
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();
    }
}
ruoyi-auth/src/main/java/com/ruoyi/auth/utils/SmsUtils.java
New file
@@ -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;
    }
}
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";
    /**
     * 登录用户
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)));
    }
}
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
        # 共享配置
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
        # 共享配置
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]: ''
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
        # 共享配置