Browse Source

update 优化api,gateway,auth代码结构

AprilWind 2 years ago
parent
commit
ef83f06f2b
35 changed files with 320 additions and 29 deletions
  1. 6 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDataScopeService.java
  2. 1 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDictService.java
  3. 1 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteLogService.java
  4. 11 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java
  5. 2 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantService.java
  6. 16 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
  7. 0 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/SysUserOnline.java
  8. 0 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteLogininforBo.java
  9. 0 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteOperLogBo.java
  10. 0 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java
  11. 0 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteClientVo.java
  12. 2 0
      ruoyi-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java
  13. 9 0
      ruoyi-auth/src/main/java/org/dromara/auth/domain/vo/TenantListVo.java
  14. 0 1
      ruoyi-auth/src/main/java/org/dromara/auth/form/EmailLoginBody.java
  15. 3 0
      ruoyi-auth/src/main/java/org/dromara/auth/form/RegisterBody.java
  16. 0 1
      ruoyi-auth/src/main/java/org/dromara/auth/form/SmsLoginBody.java
  17. 0 1
      ruoyi-auth/src/main/java/org/dromara/auth/form/SocialLoginBody.java
  18. 0 1
      ruoyi-auth/src/main/java/org/dromara/auth/form/XcxLoginBody.java
  19. 1 0
      ruoyi-auth/src/main/java/org/dromara/auth/properties/CaptchaProperties.java
  20. 9 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/IAuthStrategy.java
  21. 14 3
      ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java
  22. 1 0
      ruoyi-gateway/src/main/java/org/dromara/gateway/config/properties/IgnoreWhiteProperties.java
  23. 1 0
      ruoyi-gateway/src/main/java/org/dromara/gateway/config/properties/XssProperties.java
  24. 26 1
      ruoyi-gateway/src/main/java/org/dromara/gateway/filter/GlobalCorsFilter.java
  25. 1 0
      ruoyi-gateway/src/main/java/org/dromara/gateway/filter/GlobalLogFilter.java
  26. 1 0
      ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/domain/SysOssConfig.java
  27. 0 2
      ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/domain/bo/SysOssConfigBo.java
  28. 1 0
      ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/mapper/SysOssMapper.java
  29. 3 3
      ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssConfigService.java
  30. 57 2
      ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java
  31. 61 3
      ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java
  32. 34 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
  33. 18 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java
  34. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java
  35. 40 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

+ 6 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDataScopeService.java

@@ -9,11 +9,17 @@ public interface RemoteDataScopeService {
 
 
     /**
     /**
      * 获取角色自定义权限语句
      * 获取角色自定义权限语句
+     *
+     * @param roleId 角色ID
+     * @return 返回角色的自定义权限语句,如果没有找到则返回 null
      */
      */
     String getRoleCustom(Long roleId);
     String getRoleCustom(Long roleId);
 
 
     /**
     /**
      * 获取部门和下级权限语句
      * 获取部门和下级权限语句
+     *
+     * @param deptId 部门ID
+     * @return 返回部门及其下级的权限语句,如果没有找到则返回 null
      */
      */
     String getDeptAndChild(Long deptId);
     String getDeptAndChild(Long deptId);
 
 

+ 1 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDictService.java

@@ -18,4 +18,5 @@ public interface RemoteDictService {
      * @return 字典数据集合信息
      * @return 字典数据集合信息
      */
      */
     List<RemoteDictDataVo> selectDictDataByType(String dictType);
     List<RemoteDictDataVo> selectDictDataByType(String dictType);
+
 }
 }

+ 1 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteLogService.java

@@ -23,4 +23,5 @@ public interface RemoteLogService {
      * @param sysLogininfor 访问实体
      * @param sysLogininfor 访问实体
      */
      */
     void saveLogininfor(RemoteLogininforBo sysLogininfor);
     void saveLogininfor(RemoteLogininforBo sysLogininfor);
+
 }
 }

+ 11 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java

@@ -13,22 +13,32 @@ import java.util.List;
 public interface RemoteSocialService {
 public interface RemoteSocialService {
 
 
     /**
     /**
-     * 根据 authId 查询用户信息
+     * 根据 authId 查询用户授权信息
+     *
+     * @param authId 认证id
+     * @return 授权信息
      */
      */
     List<RemoteSocialVo> selectByAuthId(String authId);
     List<RemoteSocialVo> selectByAuthId(String authId);
 
 
     /**
     /**
      * 保存社会化关系
      * 保存社会化关系
+     *
+     * @param bo 社会化关系业务对象
      */
      */
     void insertByBo(RemoteSocialBo bo);
     void insertByBo(RemoteSocialBo bo);
 
 
     /**
     /**
      * 更新社会化关系
      * 更新社会化关系
+     *
+     * @param bo 社会化关系业务对象
      */
      */
     void updateByBo(RemoteSocialBo bo);
     void updateByBo(RemoteSocialBo bo);
 
 
     /**
     /**
      * 删除社会化关系
      * 删除社会化关系
+     *
+     * @param socialId 社会化关系ID
+     * @return 结果
      */
      */
     Boolean deleteWithValidById(Long socialId);
     Boolean deleteWithValidById(Long socialId);
 
 

+ 2 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantService.java

@@ -6,6 +6,8 @@ import org.dromara.system.api.domain.vo.RemoteTenantVo;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
+ * 租户服务
+ *
  * @author zhujie
  * @author zhujie
  */
  */
 public interface RemoteTenantService {
 public interface RemoteTenantService {

+ 16 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -81,6 +81,22 @@ public interface RemoteUserService {
      */
      */
     String selectNicknameById(Long userId);
     String selectNicknameById(Long userId);
 
 
+    /**
+     * 通过用户ID查询用户手机号
+     *
+     * @param userId 用户id
+     * @return 用户手机号
+     */
+    String selectPhonenumberById(Long userId);
+
+    /**
+     * 通过用户ID查询用户邮箱
+     *
+     * @param userId 用户id
+     * @return 用户邮箱
+     */
+    String selectEmailById(Long userId);
+
     /**
     /**
      * 更新用户信息
      * 更新用户信息
      *
      *

+ 0 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/SysUserOnline.java

@@ -11,7 +11,6 @@ import java.io.Serializable;
  *
  *
  * @author Lion Li
  * @author Lion Li
  */
  */
-
 @Data
 @Data
 @NoArgsConstructor
 @NoArgsConstructor
 public class SysUserOnline implements Serializable {
 public class SysUserOnline implements Serializable {

+ 0 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteLogininforBo.java

@@ -14,7 +14,6 @@ import java.util.Map;
  *
  *
  * @author Lion Li
  * @author Lion Li
  */
  */
-
 @Data
 @Data
 @NoArgsConstructor
 @NoArgsConstructor
 public class RemoteLogininforBo implements Serializable {
 public class RemoteLogininforBo implements Serializable {

+ 0 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteOperLogBo.java

@@ -14,7 +14,6 @@ import java.util.Map;
  *
  *
  * @author Lion Li
  * @author Lion Li
  */
  */
-
 @Data
 @Data
 @NoArgsConstructor
 @NoArgsConstructor
 public class RemoteOperLogBo implements Serializable {
 public class RemoteOperLogBo implements Serializable {

+ 0 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java

@@ -19,7 +19,6 @@ import java.util.Date;
  *
  *
  * @author Michelle.Chung
  * @author Michelle.Chung
  */
  */
-
 @Data
 @Data
 @NoArgsConstructor
 @NoArgsConstructor
 public class RemoteUserBo implements Serializable {
 public class RemoteUserBo implements Serializable {

+ 0 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteClientVo.java

@@ -67,5 +67,4 @@ public class RemoteClientVo implements Serializable {
      */
      */
     private String status;
     private String status;
 
 
-
 }
 }

+ 2 - 0
ruoyi-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java

@@ -59,11 +59,13 @@ public class CaptchaController {
         // 生成验证码
         // 生成验证码
         CaptchaType captchaType = captchaProperties.getType();
         CaptchaType captchaType = captchaProperties.getType();
         boolean isMath = CaptchaType.MATH == captchaType;
         boolean isMath = CaptchaType.MATH == captchaType;
+        //如果是则拿取数字验证码位数,如果不是则拿取字符验证码长度
         Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
         Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
         CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
         CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
         AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
         AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
         captcha.setGenerator(codeGenerator);
         captcha.setGenerator(codeGenerator);
         captcha.createCode();
         captcha.createCode();
+        // 如果是数学验证码,使用SpEL表达式处理验证码结果
         String code = captcha.getCode();
         String code = captcha.getCode();
         if (isMath) {
         if (isMath) {
             ExpressionParser parser = new SpelExpressionParser();
             ExpressionParser parser = new SpelExpressionParser();

+ 9 - 0
ruoyi-auth/src/main/java/org/dromara/auth/domain/vo/TenantListVo.java

@@ -10,10 +10,19 @@ import lombok.Data;
 @Data
 @Data
 public class TenantListVo {
 public class TenantListVo {
 
 
+    /**
+     * 租户编号
+     */
     private String tenantId;
     private String tenantId;
 
 
+    /**
+     * 企业名称
+     */
     private String companyName;
     private String companyName;
 
 
+    /**
+     * 域名
+     */
     private String domain;
     private String domain;
 
 
 }
 }

+ 0 - 1
ruoyi-auth/src/main/java/org/dromara/auth/form/EmailLoginBody.java

@@ -11,7 +11,6 @@ import org.dromara.common.core.domain.model.LoginBody;
  *
  *
  * @author Lion Li
  * @author Lion Li
  */
  */
-
 @Data
 @Data
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 public class EmailLoginBody extends LoginBody {
 public class EmailLoginBody extends LoginBody {

+ 3 - 0
ruoyi-auth/src/main/java/org/dromara/auth/form/RegisterBody.java

@@ -31,6 +31,9 @@ public class RegisterBody extends LoginBody {
     @Length(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
     @Length(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
     private String password;
     private String password;
 
 
+    /**
+     * 用户类型
+     */
     private String userType;
     private String userType;
 
 
 }
 }

+ 0 - 1
ruoyi-auth/src/main/java/org/dromara/auth/form/SmsLoginBody.java

@@ -10,7 +10,6 @@ import org.dromara.common.core.domain.model.LoginBody;
  *
  *
  * @author Lion Li
  * @author Lion Li
  */
  */
-
 @Data
 @Data
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 public class SmsLoginBody extends LoginBody {
 public class SmsLoginBody extends LoginBody {

+ 0 - 1
ruoyi-auth/src/main/java/org/dromara/auth/form/SocialLoginBody.java

@@ -10,7 +10,6 @@ import org.dromara.common.core.domain.model.LoginBody;
  *
  *
  * @author Lion Li
  * @author Lion Li
  */
  */
-
 @Data
 @Data
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 public class SocialLoginBody extends LoginBody {
 public class SocialLoginBody extends LoginBody {

+ 0 - 1
ruoyi-auth/src/main/java/org/dromara/auth/form/XcxLoginBody.java

@@ -10,7 +10,6 @@ import org.dromara.common.core.domain.model.LoginBody;
  *
  *
  * @author Lion Li
  * @author Lion Li
  */
  */
-
 @Data
 @Data
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 public class XcxLoginBody extends LoginBody {
 public class XcxLoginBody extends LoginBody {

+ 1 - 0
ruoyi-auth/src/main/java/org/dromara/auth/properties/CaptchaProperties.java

@@ -17,6 +17,7 @@ import org.springframework.context.annotation.Configuration;
 @RefreshScope
 @RefreshScope
 @ConfigurationProperties(prefix = "security.captcha")
 @ConfigurationProperties(prefix = "security.captcha")
 public class CaptchaProperties {
 public class CaptchaProperties {
+
     /**
     /**
      * 验证码类型
      * 验证码类型
      */
      */

+ 9 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/IAuthStrategy.java

@@ -16,6 +16,11 @@ public interface IAuthStrategy {
 
 
     /**
     /**
      * 登录
      * 登录
+     *
+     * @param body      登录对象
+     * @param client    授权管理视图对象
+     * @param grantType 授权类型
+     * @return 登录验证信息
      */
      */
     static LoginVo login(String body, RemoteClientVo client, String grantType) {
     static LoginVo login(String body, RemoteClientVo client, String grantType) {
         // 授权类型和客户端id
         // 授权类型和客户端id
@@ -29,6 +34,10 @@ public interface IAuthStrategy {
 
 
     /**
     /**
      * 登录
      * 登录
+     *
+     * @param body   登录对象
+     * @param client 授权管理视图对象
+     * @return 登录验证信息
      */
      */
     LoginVo login(String body, RemoteClientVo client);
     LoginVo login(String body, RemoteClientVo client);
 
 

+ 14 - 3
ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java

@@ -45,6 +45,9 @@ public class LogEventListener {
         remoteLogService.saveLog(sysOperLog);
         remoteLogService.saveLog(sysOperLog);
     }
     }
 
 
+    /**
+     * 保存系统访问记录
+     */
     @Async
     @Async
     @EventListener
     @EventListener
     public void saveLogininfor(LogininforEvent logininforEvent) {
     public void saveLogininfor(LogininforEvent logininforEvent) {
@@ -52,10 +55,10 @@ public class LogEventListener {
         final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
         final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
         final String ip = ServletUtils.getClientIP(request);
         final String ip = ServletUtils.getClientIP(request);
         // 客户端信息
         // 客户端信息
-        String clientid = request.getHeader(LoginHelper.CLIENT_KEY);
+        String clientId = request.getHeader(LoginHelper.CLIENT_KEY);
         RemoteClientVo clientVo = null;
         RemoteClientVo clientVo = null;
-        if (StringUtils.isNotBlank(clientid)) {
-            clientVo = remoteClientService.queryByClientId(clientid);
+        if (StringUtils.isNotBlank(clientId)) {
+            clientVo = remoteClientService.queryByClientId(clientId);
         }
         }
 
 
         String address = AddressUtils.getRealAddressByIP(ip);
         String address = AddressUtils.getRealAddressByIP(ip);
@@ -93,7 +96,15 @@ public class LogEventListener {
         remoteLogService.saveLogininfor(logininfor);
         remoteLogService.saveLogininfor(logininfor);
     }
     }
 
 
+    /**
+     * 将传入的对象转换为带方括号的字符串表示形式
+     * 如果传入对象为 null,则返回空字符串表示的方括号
+     *
+     * @param msg 要转换的对象,可以是任何类型
+     * @return 包含方括号的字符串表示形式
+     */
     private String getBlock(Object msg) {
     private String getBlock(Object msg) {
+        // 如果传入对象为 null,则将其替换为空字符串
         if (msg == null) {
         if (msg == null) {
             msg = "";
             msg = "";
         }
         }

+ 1 - 0
ruoyi-gateway/src/main/java/org/dromara/gateway/config/properties/IgnoreWhiteProperties.java

@@ -21,6 +21,7 @@ import java.util.List;
 @RefreshScope
 @RefreshScope
 @ConfigurationProperties(prefix = "security.ignore")
 @ConfigurationProperties(prefix = "security.ignore")
 public class IgnoreWhiteProperties {
 public class IgnoreWhiteProperties {
+
     /**
     /**
      * 放行白名单配置,网关不校验此处的白名单
      * 放行白名单配置,网关不校验此处的白名单
      */
      */

+ 1 - 0
ruoyi-gateway/src/main/java/org/dromara/gateway/config/properties/XssProperties.java

@@ -18,6 +18,7 @@ import java.util.List;
 @RefreshScope
 @RefreshScope
 @ConfigurationProperties(prefix = "security.xss")
 @ConfigurationProperties(prefix = "security.xss")
 public class XssProperties {
 public class XssProperties {
+
     /**
     /**
      * Xss开关
      * Xss开关
      */
      */

+ 26 - 1
ruoyi-gateway/src/main/java/org/dromara/gateway/filter/GlobalCorsFilter.java

@@ -25,15 +25,39 @@ public class GlobalCorsFilter implements WebFilter, Ordered {
     /**
     /**
      * 这里为支持的请求头,如果有自定义的header字段请自己添加
      * 这里为支持的请求头,如果有自定义的header字段请自己添加
      */
      */
-    private static final String ALLOWED_HEADERS = "X-Requested-With, Content-Language, Content-Type, Authorization, clientid, credential, X-XSRF-TOKEN, isToken, token, Admin-Token, App-Token";
+    private static final String ALLOWED_HEADERS = "X-Requested-With, Content-Language, Content-Type, Authorization, clientId, credential, X-XSRF-TOKEN, isToken, token, Admin-Token, App-Token";
+
+    /**
+     * 允许的请求方法
+     */
     private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD";
     private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD";
+
+    /**
+     * 允许的请求来源,使用 * 表示允许任何来源
+     */
     private static final String ALLOWED_ORIGIN = "*";
     private static final String ALLOWED_ORIGIN = "*";
+
+    /**
+     * 允许前端访问的响应头,使用 * 表示允许任何响应头
+     */
     private static final String ALLOWED_EXPOSE = "*";
     private static final String ALLOWED_EXPOSE = "*";
+
+    /**
+     * 预检请求的缓存时间,单位为秒(此处设置为 5 小时)
+     */
     private static final String MAX_AGE = "18000L";
     private static final String MAX_AGE = "18000L";
 
 
+    /**
+     * 实现跨域配置的 Web 过滤器
+     *
+     * @param exchange ServerWebExchange 对象,表示一次 Web 交换
+     * @param chain    WebFilterChain 对象,表示一组 Web 过滤器链
+     * @return Mono<Void> 表示异步的过滤器链处理结果
+     */
     @Override
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
     public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
         ServerHttpRequest request = exchange.getRequest();
         ServerHttpRequest request = exchange.getRequest();
+        // 判断请求是否为跨域请求
         if (CorsUtils.isCorsRequest(request)) {
         if (CorsUtils.isCorsRequest(request)) {
             ServerHttpResponse response = exchange.getResponse();
             ServerHttpResponse response = exchange.getResponse();
             HttpHeaders headers = response.getHeaders();
             HttpHeaders headers = response.getHeaders();
@@ -43,6 +67,7 @@ public class GlobalCorsFilter implements WebFilter, Ordered {
             headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE);
             headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE);
             headers.add("Access-Control-Max-Age", MAX_AGE);
             headers.add("Access-Control-Max-Age", MAX_AGE);
             headers.add("Access-Control-Allow-Credentials", "true");
             headers.add("Access-Control-Allow-Credentials", "true");
+            // 处理预检请求的 OPTIONS 方法,直接返回成功状态码
             if (request.getMethod() == HttpMethod.OPTIONS) {
             if (request.getMethod() == HttpMethod.OPTIONS) {
                 response.setStatusCode(HttpStatus.OK);
                 response.setStatusCode(HttpStatus.OK);
                 return Mono.empty();
                 return Mono.empty();

+ 1 - 0
ruoyi-gateway/src/main/java/org/dromara/gateway/filter/GlobalLogFilter.java

@@ -48,6 +48,7 @@ public class GlobalLogFilter implements GlobalFilter, Ordered {
         if (WebFluxUtils.isJsonRequest(exchange)) {
         if (WebFluxUtils.isJsonRequest(exchange)) {
             if (apiDecryptProperties.getEnabled()
             if (apiDecryptProperties.getEnabled()
                 && ObjectUtil.isNotNull(request.getHeaders().getFirst(apiDecryptProperties.getHeaderFlag()))) {
                 && ObjectUtil.isNotNull(request.getHeaders().getFirst(apiDecryptProperties.getHeaderFlag()))) {
+                //加密开启并且请求标识不能为空
                 log.info("[PLUS]开始请求 => URL[{}],参数类型[encrypt]", url);
                 log.info("[PLUS]开始请求 => URL[{}],参数类型[encrypt]", url);
             } else {
             } else {
                 String jsonParam = WebFluxUtils.resolveBodyFromCacheRequest(exchange);
                 String jsonParam = WebFluxUtils.resolveBodyFromCacheRequest(exchange);

+ 1 - 0
ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/domain/SysOssConfig.java

@@ -87,4 +87,5 @@ public class SysOssConfig extends BaseEntity {
      * 桶权限类型(0private 1public 2custom)
      * 桶权限类型(0private 1public 2custom)
      */
      */
     private String accessPolicy;
     private String accessPolicy;
+
 }
 }

+ 0 - 2
ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/domain/bo/SysOssConfigBo.java

@@ -19,7 +19,6 @@ import jakarta.validation.constraints.Size;
  * @author 孤舟烟雨
  * @author 孤舟烟雨
  * @date 2021-08-13
  * @date 2021-08-13
  */
  */
-
 @Data
 @Data
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = SysOssConfig.class, reverseConvertGenerate = false)
 @AutoMapper(target = SysOssConfig.class, reverseConvertGenerate = false)
@@ -107,5 +106,4 @@ public class SysOssConfigBo extends BaseEntity {
     @NotBlank(message = "桶权限类型不能为空", groups = {AddGroup.class, EditGroup.class})
     @NotBlank(message = "桶权限类型不能为空", groups = {AddGroup.class, EditGroup.class})
     private String accessPolicy;
     private String accessPolicy;
 
 
-
 }
 }

+ 1 - 0
ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/mapper/SysOssMapper.java

@@ -10,4 +10,5 @@ import org.dromara.resource.domain.vo.SysOssVo;
  * @author Lion Li
  * @author Lion Li
  */
  */
 public interface SysOssMapper extends BaseMapperPlus<SysOss, SysOssVo> {
 public interface SysOssMapper extends BaseMapperPlus<SysOss, SysOssVo> {
+
 }
 }

+ 3 - 3
ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssConfigService.java

@@ -37,7 +37,7 @@ public interface ISysOssConfigService {
      * 根据新增业务对象插入对象存储配置
      * 根据新增业务对象插入对象存储配置
      *
      *
      * @param bo 对象存储配置新增业务对象
      * @param bo 对象存储配置新增业务对象
-     * @return
+     * @return 结果
      */
      */
     Boolean insertByBo(SysOssConfigBo bo);
     Boolean insertByBo(SysOssConfigBo bo);
 
 
@@ -45,7 +45,7 @@ public interface ISysOssConfigService {
      * 根据编辑业务对象修改对象存储配置
      * 根据编辑业务对象修改对象存储配置
      *
      *
      * @param bo 对象存储配置编辑业务对象
      * @param bo 对象存储配置编辑业务对象
-     * @return
+     * @return 结果
      */
      */
     Boolean updateByBo(SysOssConfigBo bo);
     Boolean updateByBo(SysOssConfigBo bo);
 
 
@@ -54,7 +54,7 @@ public interface ISysOssConfigService {
      *
      *
      * @param ids     主键集合
      * @param ids     主键集合
      * @param isValid 是否校验,true-删除前校验,false-不校验
      * @param isValid 是否校验,true-删除前校验,false-不校验
-     * @return
+     * @return 结果
      */
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 

+ 57 - 2
ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java

@@ -1,13 +1,12 @@
 package org.dromara.resource.service;
 package org.dromara.resource.service;
 
 
+import jakarta.servlet.http.HttpServletResponse;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.resource.domain.bo.SysOssBo;
 import org.dromara.resource.domain.bo.SysOssBo;
 import org.dromara.resource.domain.vo.SysOssVo;
 import org.dromara.resource.domain.vo.SysOssVo;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
-import jakarta.servlet.http.HttpServletResponse;
-
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Collection;
@@ -20,21 +19,77 @@ import java.util.List;
  */
  */
 public interface ISysOssService {
 public interface ISysOssService {
 
 
+    /**
+     * 查询OSS对象存储列表
+     *
+     * @param sysOss    OSS对象存储分页查询对象
+     * @param pageQuery 分页查询实体类
+     * @return 结果
+     */
     TableDataInfo<SysOssVo> queryPageList(SysOssBo sysOss, PageQuery pageQuery);
     TableDataInfo<SysOssVo> queryPageList(SysOssBo sysOss, PageQuery pageQuery);
 
 
+    /**
+     * 根据一组 ossIds 获取对应的 SysOssVo 列表
+     *
+     * @param ossIds 一组文件在数据库中的唯一标识集合
+     * @return 包含 SysOssVo 对象的列表
+     */
     List<SysOssVo> listByIds(Collection<Long> ossIds);
     List<SysOssVo> listByIds(Collection<Long> ossIds);
 
 
+    /**
+     * 根据一组 ossIds 获取对应文件的 URL 列表
+     *
+     * @param ossIds 以逗号分隔的 ossId 字符串
+     * @return 以逗号分隔的文件 URL 字符串
+     */
     String selectUrlByIds(String ossIds);
     String selectUrlByIds(String ossIds);
 
 
+    /**
+     * 根据 ossId 从缓存或数据库中获取 SysOssVo 对象
+     *
+     * @param ossId 文件在数据库中的唯一标识
+     * @return SysOssVo 对象,包含文件信息
+     */
     SysOssVo getById(Long ossId);
     SysOssVo getById(Long ossId);
 
 
+    /**
+     * 上传 MultipartFile 到对象存储服务,并保存文件信息到数据库
+     *
+     * @param file 要上传的 MultipartFile 对象
+     * @return 上传成功后的 SysOssVo 对象,包含文件信息
+     */
     SysOssVo upload(MultipartFile file);
     SysOssVo upload(MultipartFile file);
 
 
+    /**
+     * 上传文件到对象存储服务,并保存文件信息到数据库
+     *
+     * @param file 要上传的文件对象
+     * @return 上传成功后的 SysOssVo 对象,包含文件信息
+     */
     SysOssVo upload(File file);
     SysOssVo upload(File file);
 
 
+    /**
+     * 新增OSS对象存储
+     *
+     * @param bo SysOssBo 对象,包含待插入的数据
+     * @return 插入操作是否成功的布尔值
+     */
     Boolean insertByBo(SysOssBo bo);
     Boolean insertByBo(SysOssBo bo);
 
 
+    /**
+     * 文件下载方法,支持一次性下载完整文件
+     *
+     * @param ossId    OSS对象ID
+     * @param response HttpServletResponse对象,用于设置响应头和向客户端发送文件内容
+     */
     void download(Long ossId, HttpServletResponse response) throws IOException;
     void download(Long ossId, HttpServletResponse response) throws IOException;
 
 
+    /**
+     * 删除OSS对象存储
+     *
+     * @param ids     OSS对象ID串
+     * @param isValid 判断是否需要校验
+     * @return 结果
+     */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 }
 }

+ 61 - 3
ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java

@@ -51,6 +51,13 @@ public class SysOssServiceImpl implements ISysOssService {
 
 
     private final SysOssMapper baseMapper;
     private final SysOssMapper baseMapper;
 
 
+    /**
+     * 查询OSS对象存储列表
+     *
+     * @param bo        OSS对象存储分页查询对象
+     * @param pageQuery 分页查询实体类
+     * @return 结果
+     */
     @Override
     @Override
     public TableDataInfo<SysOssVo> queryPageList(SysOssBo bo, PageQuery pageQuery) {
     public TableDataInfo<SysOssVo> queryPageList(SysOssBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<SysOss> lqw = buildQueryWrapper(bo);
         LambdaQueryWrapper<SysOss> lqw = buildQueryWrapper(bo);
@@ -60,6 +67,12 @@ public class SysOssServiceImpl implements ISysOssService {
         return TableDataInfo.build(result);
         return TableDataInfo.build(result);
     }
     }
 
 
+    /**
+     * 根据一组 ossIds 获取对应的 SysOssVo 列表
+     *
+     * @param ossIds 一组文件在数据库中的唯一标识集合
+     * @return 包含 SysOssVo 对象的列表
+     */
     @Override
     @Override
     public List<SysOssVo> listByIds(Collection<Long> ossIds) {
     public List<SysOssVo> listByIds(Collection<Long> ossIds) {
         List<SysOssVo> list = new ArrayList<>();
         List<SysOssVo> list = new ArrayList<>();
@@ -71,11 +84,18 @@ public class SysOssServiceImpl implements ISysOssService {
                 } catch (Exception ignored) {
                 } catch (Exception ignored) {
                     // 如果oss异常无法连接则将数据直接返回
                     // 如果oss异常无法连接则将数据直接返回
                     list.add(vo);
                     list.add(vo);
-                }            }
+                }
+            }
         }
         }
         return list;
         return list;
     }
     }
 
 
+    /**
+     * 根据一组 ossIds 获取对应文件的 URL 列表
+     *
+     * @param ossIds 以逗号分隔的 ossId 字符串
+     * @return 以逗号分隔的文件 URL 字符串
+     */
     @Override
     @Override
     public String selectUrlByIds(String ossIds) {
     public String selectUrlByIds(String ossIds) {
         List<String> list = new ArrayList<>();
         List<String> list = new ArrayList<>();
@@ -108,12 +128,24 @@ public class SysOssServiceImpl implements ISysOssService {
         return lqw;
         return lqw;
     }
     }
 
 
+    /**
+     * 根据 ossId 从缓存或数据库中获取 SysOssVo 对象
+     *
+     * @param ossId 文件在数据库中的唯一标识
+     * @return SysOssVo 对象,包含文件信息
+     */
     @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId")
     @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId")
     @Override
     @Override
     public SysOssVo getById(Long ossId) {
     public SysOssVo getById(Long ossId) {
         return baseMapper.selectVoById(ossId);
         return baseMapper.selectVoById(ossId);
     }
     }
 
 
+    /**
+     * 文件下载方法,支持一次性下载完整文件
+     *
+     * @param ossId    OSS对象ID
+     * @param response HttpServletResponse对象,用于设置响应头和向客户端发送文件内容
+     */
     @Override
     @Override
     public void download(Long ossId, HttpServletResponse response) throws IOException {
     public void download(Long ossId, HttpServletResponse response) throws IOException {
         SysOssVo sysOss = SpringUtils.getAopProxy(this).getById(ossId);
         SysOssVo sysOss = SpringUtils.getAopProxy(this).getById(ossId);
@@ -123,7 +155,7 @@ public class SysOssServiceImpl implements ISysOssService {
         FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName());
         FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName());
         response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
         response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
         OssClient storage = OssFactory.instance(sysOss.getService());
         OssClient storage = OssFactory.instance(sysOss.getService());
-        try(InputStream inputStream = storage.getObjectContent(sysOss.getUrl())) {
+        try (InputStream inputStream = storage.getObjectContent(sysOss.getUrl())) {
             int available = inputStream.available();
             int available = inputStream.available();
             IoUtil.copy(inputStream, response.getOutputStream(), available);
             IoUtil.copy(inputStream, response.getOutputStream(), available);
             response.setContentLength(available);
             response.setContentLength(available);
@@ -132,6 +164,13 @@ public class SysOssServiceImpl implements ISysOssService {
         }
         }
     }
     }
 
 
+    /**
+     * 上传 MultipartFile 到对象存储服务,并保存文件信息到数据库
+     *
+     * @param file 要上传的 MultipartFile 对象
+     * @return 上传成功后的 SysOssVo 对象,包含文件信息
+     * @throws ServiceException 如果上传过程中发生异常,则抛出 ServiceException 异常
+     */
     @Override
     @Override
     public SysOssVo upload(MultipartFile file) {
     public SysOssVo upload(MultipartFile file) {
         String originalfileName = file.getOriginalFilename();
         String originalfileName = file.getOriginalFilename();
@@ -147,6 +186,12 @@ public class SysOssServiceImpl implements ISysOssService {
         return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
         return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
     }
     }
 
 
+    /**
+     * 上传文件到对象存储服务,并保存文件信息到数据库
+     *
+     * @param file 要上传的文件对象
+     * @return 上传成功后的 SysOssVo 对象,包含文件信息
+     */
     @Override
     @Override
     public SysOssVo upload(File file) {
     public SysOssVo upload(File file) {
         String originalfileName = file.getName();
         String originalfileName = file.getName();
@@ -169,6 +214,12 @@ public class SysOssServiceImpl implements ISysOssService {
         return this.matchingUrl(sysOssVo);
         return this.matchingUrl(sysOssVo);
     }
     }
 
 
+    /**
+     * 新增OSS对象存储
+     *
+     * @param bo SysOssBo 对象,包含待插入的数据
+     * @return 插入操作是否成功的布尔值
+     */
     @Override
     @Override
     public Boolean insertByBo(SysOssBo bo) {
     public Boolean insertByBo(SysOssBo bo) {
         SysOss oss = BeanUtil.toBean(bo, SysOss.class);
         SysOss oss = BeanUtil.toBean(bo, SysOss.class);
@@ -179,6 +230,13 @@ public class SysOssServiceImpl implements ISysOssService {
         return flag;
         return flag;
     }
     }
 
 
+    /**
+     * 删除OSS对象存储
+     *
+     * @param ids     OSS对象ID串
+     * @param isValid 判断是否需要校验
+     * @return 结果
+     */
     @Override
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if (isValid) {
         if (isValid) {
@@ -193,7 +251,7 @@ public class SysOssServiceImpl implements ISysOssService {
     }
     }
 
 
     /**
     /**
-     * 匹配Url
+     * 桶类型为 private 的URL 修改为临时URL时长为120s
      *
      *
      * @param oss OSS对象
      * @param oss OSS对象
      * @return oss 匹配Url的OSS对象
      * @return oss 匹配Url的OSS对象

+ 34 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -148,16 +148,50 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         return userService.registerUser(sysUserBo, remoteUserBo.getTenantId());
         return userService.registerUser(sysUserBo, remoteUserBo.getTenantId());
     }
     }
 
 
+    /**
+     * 通过用户ID查询用户账户
+     *
+     * @param userId 用户ID
+     * @return 用户账户
+     */
     @Override
     @Override
     public String selectUserNameById(Long userId) {
     public String selectUserNameById(Long userId) {
         return userService.selectUserNameById(userId);
         return userService.selectUserNameById(userId);
     }
     }
 
 
+    /**
+     * 通过用户ID查询用户昵称
+     *
+     * @param userId 用户ID
+     * @return 用户昵称
+     */
     @Override
     @Override
     public String selectNicknameById(Long userId) {
     public String selectNicknameById(Long userId) {
         return userService.selectNicknameById(userId);
         return userService.selectNicknameById(userId);
     }
     }
 
 
+    /**
+     * 通过用户ID查询用户手机号
+     *
+     * @param userId 用户id
+     * @return 用户手机号
+     */
+    @Override
+    public String selectPhonenumberById(Long userId) {
+        return userService.selectPhonenumberById(userId);
+    }
+
+    /**
+     * 通过用户ID查询用户邮箱
+     *
+     * @param userId 用户id
+     * @return 用户邮箱
+     */
+    @Override
+    public String selectEmailById(Long userId) {
+        return userService.selectEmailById(userId);
+    }
+
     /**
     /**
      * 构建登录用户
      * 构建登录用户
      */
      */

+ 18 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java

@@ -219,11 +219,27 @@ public interface ISysUserService {
      */
      */
     String selectNicknameById(Long userId);
     String selectNicknameById(Long userId);
 
 
+    /**
+     * 通过用户ID查询用户手机号
+     *
+     * @param userId 用户id
+     * @return 用户手机号
+     */
+    String selectPhonenumberById(Long userId);
+
+    /**
+     * 通过用户ID查询用户邮箱
+     *
+     * @param userId 用户id
+     * @return 用户邮箱
+     */
+    String selectEmailById(Long userId);
+
     /**
     /**
      * 通过部门id查询当前部门所有用户
      * 通过部门id查询当前部门所有用户
      *
      *
-     * @param deptId
-     * @return
+     * @param deptId 部门id
+     * @return 结果
      */
      */
     List<SysUserVo> selectUserListByDept(Long deptId);
     List<SysUserVo> selectUserListByDept(Long deptId);
 
 

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java

@@ -94,7 +94,7 @@ public class SysClientServiceImpl implements ISysClientService {
         SysClient add = MapstructUtils.convert(bo, SysClient.class);
         SysClient add = MapstructUtils.convert(bo, SysClient.class);
         validEntityBeforeSave(add);
         validEntityBeforeSave(add);
         add.setGrantType(String.join(",", bo.getGrantTypeList()));
         add.setGrantType(String.join(",", bo.getGrantTypeList()));
-        // 生成clientid
+        // 生成clientId
         String clientKey = bo.getClientKey();
         String clientKey = bo.getClientKey();
         String clientSecret = bo.getClientSecret();
         String clientSecret = bo.getClientSecret();
         add.setClientId(SecureUtil.md5(clientKey + clientSecret));
         add.setClientId(SecureUtil.md5(clientKey + clientSecret));

+ 40 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -523,8 +523,8 @@ public class SysUserServiceImpl implements ISysUserService {
     /**
     /**
      * 通过部门id查询当前部门所有用户
      * 通过部门id查询当前部门所有用户
      *
      *
-     * @param deptId
-     * @return
+     * @param deptId 部门ID
+     * @return 用户信息集合信息
      */
      */
     @Override
     @Override
     public List<SysUserVo> selectUserListByDept(Long deptId) {
     public List<SysUserVo> selectUserListByDept(Long deptId) {
@@ -534,6 +534,12 @@ public class SysUserServiceImpl implements ISysUserService {
         return baseMapper.selectVoList(lqw);
         return baseMapper.selectVoList(lqw);
     }
     }
 
 
+    /**
+     * 通过用户ID查询用户账户
+     *
+     * @param userId 用户ID
+     * @return 用户账户
+     */
     @Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId")
     @Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId")
     @Override
     @Override
     public String selectUserNameById(Long userId) {
     public String selectUserNameById(Long userId) {
@@ -542,6 +548,12 @@ public class SysUserServiceImpl implements ISysUserService {
         return ObjectUtil.isNull(sysUser) ? null : sysUser.getUserName();
         return ObjectUtil.isNull(sysUser) ? null : sysUser.getUserName();
     }
     }
 
 
+    /**
+     * 通过用户ID查询用户昵称
+     *
+     * @param userId 用户ID
+     * @return 用户昵称
+     */
     @Override
     @Override
     @Cacheable(cacheNames = CacheNames.SYS_NICKNAME, key = "#userId")
     @Cacheable(cacheNames = CacheNames.SYS_NICKNAME, key = "#userId")
     public String selectNicknameById(Long userId) {
     public String selectNicknameById(Long userId) {
@@ -550,4 +562,30 @@ public class SysUserServiceImpl implements ISysUserService {
         return ObjectUtil.isNull(sysUser) ? null : sysUser.getNickName();
         return ObjectUtil.isNull(sysUser) ? null : sysUser.getNickName();
     }
     }
 
 
+    /**
+     * 通过用户ID查询用户手机号
+     *
+     * @param userId 用户id
+     * @return 用户手机号
+     */
+    @Override
+    public String selectPhonenumberById(Long userId) {
+        SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
+            .select(SysUser::getPhonenumber).eq(SysUser::getUserId, userId));
+        return ObjectUtil.isNull(sysUser) ? null : sysUser.getPhonenumber();
+    }
+
+    /**
+     * 通过用户ID查询用户邮箱
+     *
+     * @param userId 用户id
+     * @return 用户邮箱
+     */
+    @Override
+    public String selectEmailById(Long userId) {
+        SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
+            .select(SysUser::getEmail).eq(SysUser::getUserId, userId));
+        return ObjectUtil.isNull(sysUser) ? null : sysUser.getEmail();
+    }
+
 }
 }