From c738530fb3890f50b788375ec5a81b8f03242cc6 Mon Sep 17 00:00:00 2001 From: qirong <2032486488@qq.com> Date: 星期三, 22 十一月 2023 16:11:21 +0800 Subject: [PATCH] 修改 --- ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java | 109 ++++++ ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java | 4 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java | 20 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java | 5 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java | 5 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java | 10 ruoyi-modules/ruoyi-system/pom.xml | 6 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java | 10 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java | 80 ++++ ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java | 17 + ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java | 36 ++ ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java | 5 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java | 137 ++++++++ ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java | 1 ruoyi-admin/src/main/resources/application.yml | 6 ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java | 25 + ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java | 12 ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java | 226 ++++++++++++++ ruoyi-admin/src/main/resources/application-prod.yml | 72 ++-- ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java | 20 + ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java | 42 ++ ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java | 10 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java | 1 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java | 32 ++ ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java | 49 +++ 28 files changed, 873 insertions(+), 73 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 86452e5..a1bf9ba 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -3,6 +3,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -23,12 +24,13 @@ import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.SysClient; +import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bo.SysTenantBo; +import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysTenantVo; -import org.dromara.system.service.ISysClientService; -import org.dromara.system.service.ISysConfigService; -import org.dromara.system.service.ISysSocialService; -import org.dromara.system.service.ISysTenantService; +import org.dromara.system.mapper.SysUserMapper; +import org.dromara.system.service.*; +import org.dromara.system.uitil.AutoLoginUtil; import org.dromara.web.domain.vo.LoginTenantVo; import org.dromara.web.domain.vo.LoginVo; import org.dromara.web.domain.vo.TenantListVo; @@ -61,6 +63,8 @@ private final ISysTenantService tenantService; private final ISysSocialService socialUserService; private final ISysClientService clientService; + private final ISysUserService userService; + private final SysUserMapper userMapper; /** @@ -186,4 +190,28 @@ return R.ok(vo); } + /** + * 鑷姩娉ㄥ唽骞剁櫥褰� + */ +// @SaCheckPermission("system:user:auto") + @PutMapping(value = "auto") + public R<LoginVo> auto(@Validated @RequestBody RegisterBody user) { + AutoLoginUtil.padding(user); + String clientId = "e5cd7e4891bf95d1d19206ce24a7b32e"; + //pc + SysClient client = clientService.queryByClientId(clientId); + //妫�楠屾槸鍚﹀瓨鍦ㄨ处鍙� + boolean exists = userMapper.exists(new LambdaQueryWrapper<SysUser>() + .eq(SysUser::getUserName, user.getUsername()) + .eq(SysUser::getStatus, "0") + .eq(SysUser::getDelFlag, "0")); + if(!exists){ + registerService.register(user); + } + + LoginBody loginBody = AutoLoginUtil.create(user,clientId); +// 鐧诲綍 + return R.ok(IAuthStrategy.login(loginBody, client)); + } + } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java index 4d4b072..c5aaea3 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java @@ -19,8 +19,12 @@ import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.config.properties.CaptchaProperties; import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.bo.SysUserBo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.enums.RoleType; import org.dromara.system.mapper.SysUserMapper; +import org.dromara.system.mapper.SysUserRoleMapper; import org.dromara.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -37,6 +41,7 @@ private final ISysUserService userService; private final SysUserMapper userMapper; private final CaptchaProperties captchaProperties; + private final SysUserRoleMapper userRoleMapper; /** * 娉ㄥ唽 @@ -50,7 +55,7 @@ boolean captchaEnabled = captchaProperties.getEnable(); // 楠岃瘉鐮佸紑鍏� - if (captchaEnabled) { + if (!captchaEnabled) { validateCaptcha(tenantId, username, registerBody.getCode(), registerBody.getUuid()); } SysUserBo sysUser = new SysUserBo(); @@ -70,6 +75,11 @@ if (!regFlag) { throw new UserException("user.register.error"); } + SysUserVo sysUserVo = userMapper.selectUserByUserName(username); + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(sysUserVo.getUserId()); + userRole.setRoleId(Long.valueOf(RoleType.INTERNET.getType())); + userRoleMapper.insert(userRole); recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success")); } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java index 46bd566..decca53 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java @@ -62,7 +62,7 @@ boolean captchaEnabled = captchaProperties.getEnable(); // 楠岃瘉鐮佸紑鍏� - if (captchaEnabled) { + if (!captchaEnabled) { validateCaptcha(tenantId, username, code, uuid); } diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 148b50e..8b91cb9 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -1,6 +1,3 @@ ---- # 涓存椂鏂囦欢瀛樺偍浣嶇疆 閬垮厤涓存椂鏂囦欢琚郴缁熸竻鐞嗘姤閿� -spring.servlet.multipart.location: /ruoyi/server/temp - --- # 鐩戞帶涓績閰嶇疆 spring.boot.admin.client: # 澧炲姞瀹㈡埛绔紑鍏� @@ -34,7 +31,7 @@ # 鍔ㄦ�佹暟鎹簮鏂囨。 https://www.kancloud.cn/tracy5546/dynamic-datasource/content dynamic: # 鎬ц兘鍒嗘瀽鎻掍欢(鏈夋�ц兘鎹熻�� 涓嶅缓璁敓浜х幆澧冧娇鐢�) - p6spy: false + p6spy: true # 璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓� master primary: master # 涓ユ牸妯″紡 鍖归厤涓嶅埌鏁版嵁婧愬垯鎶ラ敊 @@ -46,9 +43,18 @@ driverClassName: com.mysql.cj.jdbc.Driver # jdbc 鎵�鏈夊弬鏁伴厤缃弬鑰� https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 鎵瑰鐞嗕紭鍖� 澶у箙鎻愬崌鎵归噺鎻掑叆鏇存柊鍒犻櫎鎬ц兘(瀵规暟鎹簱鏈夋�ц兘鎹熻�� 浣跨敤鎵归噺鎿嶄綔搴旇�冭檻鎬ц兘闂) - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true + url: jdbc:mysql://123.207.71.245:13306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true username: root - password: root + password: 234#Wersdf! +# url: jdbc:mysql://80.36.32.175:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true +# username: root +# password: 234#Wersdf! +# url: jdbc:mysql://51.9.57.211:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true +# username: root +# password: 234#Wersdf! +# url: jdbc:mysql://172.35.50.34:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true +# username: root +# password: 234#Wersdf! # 浠庡簱鏁版嵁婧� slave: lazy: true @@ -57,26 +63,26 @@ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true username: password: -# oracle: -# type: ${spring.datasource.type} -# driverClassName: oracle.jdbc.OracleDriver -# url: jdbc:oracle:thin:@//localhost:1521/XE -# username: ROOT -# password: root -# hikari: -# connectionTestQuery: SELECT 1 FROM DUAL -# postgres: -# type: ${spring.datasource.type} -# driverClassName: org.postgresql.Driver -# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true -# username: root -# password: root -# sqlserver: -# type: ${spring.datasource.type} -# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver -# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true -# username: SA -# password: root + # oracle: + # type: ${spring.datasource.type} + # driverClassName: oracle.jdbc.OracleDriver + # url: jdbc:oracle:thin:@//localhost:1521/XE + # username: ROOT + # password: root + # hikari: + # connectionTestQuery: SELECT 1 FROM DUAL + # postgres: + # type: ${spring.datasource.type} + # driverClassName: org.postgresql.Driver + # url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true + # username: root + # password: root + # sqlserver: + # type: ${spring.datasource.type} + # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver + # url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true + # username: SA + # password: root hikari: # 鏈�澶ц繛鎺ユ睜鏁伴噺 maxPoolSize: 20 @@ -99,9 +105,10 @@ spring.data: redis: # 鍦板潃 - host: localhost + host: 162.14.79.111 # 绔彛锛岄粯璁や负6379 - port: 6379 + port: 16379 + password: 234#Wersdf! # 鏁版嵁搴撶储寮� database: 0 # 瀵嗙爜(濡傛病鏈夊瘑鐮佽娉ㄩ噴鎺�) @@ -115,17 +122,17 @@ # redis key鍓嶇紑 keyPrefix: # 绾跨▼姹犳暟閲� - threads: 16 + threads: 4 # Netty绾跨▼姹犳暟閲� - nettyThreads: 32 + nettyThreads: 8 # 鍗曡妭鐐归厤缃� singleServerConfig: # 瀹㈡埛绔悕绉� clientName: ${ruoyi.name} # 鏈�灏忕┖闂茶繛鎺ユ暟 - connectionMinimumIdleSize: 32 + connectionMinimumIdleSize: 8 # 杩炴帴姹犲ぇ灏� - connectionPoolSize: 64 + connectionPoolSize: 32 # 杩炴帴绌洪棽瓒呮椂锛屽崟浣嶏細姣 idleConnectionTimeout: 10000 # 鍛戒护绛夊緟瓒呮椂锛屽崟浣嶏細姣 @@ -182,6 +189,7 @@ #鍦板煙淇℃伅榛樿涓� ap-guangzhou 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� territory: ap-guangzhou + --- # 涓夋柟鎺堟潈 justauth: enabled: true diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 2b508e2..6d6628d 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -71,9 +71,9 @@ servlet: multipart: # 鍗曚釜鏂囦欢澶у皬 - max-file-size: 10MB + max-file-size: 500MB # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬 - max-request-size: 20MB + max-request-size: 500MB mvc: format: date-time: yyyy-MM-dd HH:mm:ss @@ -97,7 +97,7 @@ timeout: 604800 # 澶氱涓嶅悓 token 鏈夋晥鏈� 鍙煡鐪� LoginHelper.loginByDevice 鏂规硶鑷畾涔� # token鏈�浣庢椿璺冩椂闂� (鎸囧畾鏃堕棿鏃犳搷浣滃氨杩囨湡) 鍗曚綅: 绉� - active-timeout: 1800 + active-timeout: 86400 # 鏄惁鍏佽鍚屼竴璐﹀彿骞跺彂鐧诲綍 (涓簍rue鏃跺厑璁镐竴璧风櫥褰�, 涓篺alse鏃舵柊鐧诲綍鎸ゆ帀鏃х櫥褰�) is-concurrent: true # 鍦ㄥ浜虹櫥褰曞悓涓�璐﹀彿鏃讹紝鏄惁鍏辩敤涓�涓猼oken (涓簍rue鏃舵墍鏈夌櫥褰曞叡鐢ㄤ竴涓猼oken, 涓篺alse鏃舵瘡娆$櫥褰曟柊寤轰竴涓猼oken) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java index 71e4991..3665a18 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java @@ -19,7 +19,7 @@ /** * 瀹㈡埛绔痠d */ - @NotBlank(message = "{auth.clientid.not.blank}") +// @NotBlank(message = "{auth.clientid.not.blank}") private String clientId; /** @@ -35,7 +35,7 @@ /** * 鎺堟潈绫诲瀷 */ - @NotBlank(message = "{auth.grant.type.not.blank}") +// @NotBlank(message = "{auth.grant.type.not.blank}") private String grantType; /** @@ -70,49 +70,49 @@ /** * 鎵嬫満鍙� */ - @NotBlank(message = "{user.phonenumber.not.blank}", groups = {SmsGroup.class}) +// @NotBlank(message = "{user.phonenumber.not.blank}", groups = {SmsGroup.class}) private String phonenumber; /** * 鐭俊code */ - @NotBlank(message = "{sms.code.not.blank}", groups = {SmsGroup.class}) +// @NotBlank(message = "{sms.code.not.blank}", groups = {SmsGroup.class}) private String smsCode; /** * 閭 */ - @NotBlank(message = "{user.email.not.blank}", groups = {EmailGroup.class}) +// @NotBlank(message = "{user.email.not.blank}", groups = {EmailGroup.class}) @Email(message = "{user.email.not.valid}") private String email; /** * 閭code */ - @NotBlank(message = "{email.code.not.blank}", groups = {EmailGroup.class}) +// @NotBlank(message = "{email.code.not.blank}", groups = {EmailGroup.class}) private String emailCode; /** * 灏忕▼搴廲ode */ - @NotBlank(message = "{xcx.code.not.blank}", groups = {WechatGroup.class}) +// @NotBlank(message = "{xcx.code.not.blank}", groups = {WechatGroup.class}) private String xcxCode; /** * 绗笁鏂圭櫥褰曞钩鍙� */ - @NotBlank(message = "{social.source.not.blank}" , groups = {SocialGroup.class}) +// @NotBlank(message = "{social.source.not.blank}" , groups = {SocialGroup.class}) private String source; /** * 绗笁鏂圭櫥褰昪ode */ - @NotBlank(message = "{social.code.not.blank}" , groups = {SocialGroup.class}) +// @NotBlank(message = "{social.code.not.blank}" , groups = {SocialGroup.class}) private String socialCode; /** * 绗笁鏂圭櫥褰晄ocialState */ - @NotBlank(message = "{social.state.not.blank}" , groups = {SocialGroup.class}) +// @NotBlank(message = "{social.state.not.blank}" , groups = {SocialGroup.class}) private String socialState; } diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index 53e05c9..9d90e3c 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -141,6 +141,10 @@ return upload(data, getPath(properties.getPrefix(), suffix), contentType); } + public UploadResult uploadSuffix2(byte[] data, String path, String contentType) { + return upload(data, path, contentType); + } + public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) { return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType); } diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java new file mode 100644 index 0000000..c052ffc --- /dev/null +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java @@ -0,0 +1,25 @@ +package org.dromara.common.oss.entity; + +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class SynchronousRequest implements Serializable { + + //鏂囦欢 + private MultipartFile file; + //minio璺緞 + private String path; + //ossId + private String ossId; + //鍒涘缓鏃堕棿 + private Date createTime; + //鍒涘缓浜� + private String createBy; + //瀵嗙爜 + private String password; + +} diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java index 6503eb1..c41c4f5 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java @@ -40,6 +40,7 @@ * 鏍规嵁绫诲瀷鑾峰彇瀹炰緥 */ public static OssClient instance(String configKey) { + String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey); if (json == null) { throw new OssException("绯荤粺寮傚父, '" + configKey + "'閰嶇疆淇℃伅涓嶅瓨鍦�!"); diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java index 8d435a3..9918862 100644 --- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java +++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java @@ -130,7 +130,7 @@ * 鑾峰彇褰撳墠绉熸埛id(鍔ㄦ�佺鎴蜂紭鍏�) */ public static String getTenantId() { - String tenantId = TenantHelper.getDynamic(); + String tenantId = "000000"; if (StringUtils.isBlank(tenantId)) { tenantId = LoginHelper.getTenantId(); } diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java index f9b81c1..edd10ff 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java @@ -1,11 +1,13 @@ package org.dromara.demo.controller.queue; +import cn.dev33.satoken.annotation.SaIgnore; import org.dromara.common.core.domain.R; import org.dromara.common.redis.utils.QueueUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.TimeUnit; @@ -22,6 +24,7 @@ * @author Lion Li * @version 3.6.0 */ +@SaIgnore @Slf4j @RequiredArgsConstructor @RestController @@ -40,6 +43,7 @@ QueueUtils.subscribeBlockingQueue(queueName, (String orderNum) -> { // 瑙傚療鎺ユ敹鏃堕棿 log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", queueName, orderNum); + }); return R.ok("鎿嶄綔鎴愬姛"); } @@ -49,11 +53,11 @@ * * @param queueName 闃熷垪鍚� * @param orderNum 璁㈠崟鍙� - * @param time 寤惰繜鏃堕棿(绉�) +// * @param time 寤惰繜鏃堕棿(绉�) */ @GetMapping("/add") - public R<Void> add(String queueName, String orderNum, Long time) { - QueueUtils.addDelayedQueueObject(queueName, orderNum, time, TimeUnit.SECONDS); + public R<Void> add(@RequestParam("queueName") String queueName, @RequestParam("orderNum")String orderNum) { + QueueUtils.addDelayedQueueObject(queueName, orderNum, 5, TimeUnit.SECONDS); // 瑙傚療鍙戦�佹椂闂� log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", queueName, orderNum); return R.ok("鎿嶄綔鎴愬姛"); diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index 9591ac1..d1f1a2d 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -90,6 +90,12 @@ <artifactId>ruoyi-common-encrypt</artifactId> </dependency> + <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + <version>3.1</version> + </dependency> + </dependencies> </project> diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java index c73c386..80d1f58 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java @@ -1,6 +1,8 @@ package org.dromara.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.net.NetUtil; import org.dromara.common.core.domain.R; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.log.annotation.Log; @@ -16,6 +18,12 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.*; +import java.util.ArrayList; +import java.util.Enumeration; import java.util.List; /** @@ -23,6 +31,7 @@ * * @author Lion Li */ +@SaIgnore @Validated @RequiredArgsConstructor @RestController @@ -134,4 +143,5 @@ configService.resetConfigCache(); return R.ok(); } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java index 73ada3b..9b9ac96 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java @@ -2,17 +2,25 @@ import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.util.ObjectUtil; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.QueryGroup; +import org.dromara.common.oss.entity.SynchronousRequest; +import org.dromara.common.redis.utils.CacheUtils; +import org.dromara.common.redis.utils.QueueUtils; import org.dromara.common.web.core.BaseController; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.system.domain.SysOss; import org.dromara.system.domain.bo.SysOssBo; import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.mapper.SysOssMapper; import org.dromara.system.service.ISysOssService; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; @@ -25,12 +33,15 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; +import java.util.concurrent.TimeUnit; /** * 鏂囦欢涓婁紶 鎺у埗灞� * * @author Lion Li */ +@Slf4j +//@SaIgnore @Validated @RequiredArgsConstructor @RestController @@ -38,7 +49,7 @@ public class SysOssController extends BaseController { private final ISysOssService ossService; - + private final SysOssMapper ossMapper; /** * 鏌ヨOSS瀵硅薄瀛樺偍鍒楄〃 */ @@ -74,10 +85,19 @@ return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖"); } SysOssVo oss = ossService.upload(file); + SynchronousRequest request = new SynchronousRequest(); + request.setFile(file); + + + + //娣诲姞闃熷垪鏁版嵁 + QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.HOURS); + log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", "OSS", oss.getOssId()); SysOssUploadVo uploadVo = new SysOssUploadVo(); uploadVo.setUrl(oss.getUrl()); uploadVo.setFileName(oss.getOriginalName()); uploadVo.setOssId(oss.getOssId().toString()); + uploadVo.setPassword(oss.getPassword()); return R.ok(uploadVo); } @@ -87,9 +107,14 @@ * @param ossId OSS瀵硅薄ID */ @SaCheckPermission("system:oss:download") - @GetMapping("/download/{ossId}") - public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException { + @GetMapping("/download/{ossId}/{password}") + public R<String> download(@PathVariable Long ossId, @PathVariable String password, HttpServletResponse response) throws IOException { + SysOss oss = ossMapper.selectById(ossId); + if(!oss.getPassword().equals(password)){ + return R.fail("鎻愬彇鐮侀敊璇紒"); + } ossService.download(ossId, response); + return R.ok(); } /** @@ -99,10 +124,53 @@ */ @SaCheckPermission("system:oss:remove") @Log(title = "OSS瀵硅薄瀛樺偍", businessType = BusinessType.DELETE) - @DeleteMapping("/{ossIds}") + @DeleteMapping("/{ossIds}/{password}") public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ossIds) { - return toAjax(ossService.deleteWithValidByIds(List.of(ossIds), true)); + @PathVariable Long[] ossIds, + @PathVariable String password) { + return ossService.deleteWithValidByIds(List.of(ossIds), true,password) ? R.ok() : R.fail("鎻愬彇鐮侀敊璇紒"); } + /** + * 鏌ョ湅OSS瀵硅薄瀛樺偍涓存椂瀵嗙爜 + * + * @param ossId OSS瀵硅薄ID + */ + @SaCheckPermission("system:oss:view") + @GetMapping("/{ossId}") + public R<String> view(@PathVariable Long ossId) { + return ossService.viewPasswordById(ossId); + } + + /** + * 璁㈤槄闃熷垪(鐩戝惉) + * + * @param queueName 闃熷垪鍚� + */ + @GetMapping("/subscribe") + public R<Void> subscribe(String queueName) { + log.info("閫氶亾: {} 鐩戝惉涓�......", queueName); + // 椤圭洰鍒濆鍖栬缃竴娆″嵆鍙� + QueueUtils.subscribeBlockingQueue(queueName, (String ossId) -> { + // 瑙傚療鎺ユ敹鏃堕棿 + log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", queueName, ossId); +// ossMapper.deleteById(Long.valueOf(ossId)); + }); + return R.ok("鎿嶄綔鎴愬姛"); + } + + /** + * 鍚屾 + * @param + * @return + */ + @PostMapping(value = "/synchronization") + public R synchronization(SynchronousRequest request) { + if (ObjectUtil.isNull(request.getFile())) { + return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖"); + } + log.info("ossId:{}",request.getOssId()); + SysOssVo oss = ossService.upload2(request); + return R.ok(); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index 628060a..b3daef8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -1,6 +1,7 @@ package org.dromara.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ArrayUtil; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java new file mode 100644 index 0000000..cf7df2e --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java @@ -0,0 +1,17 @@ +package org.dromara.system.convert; + +import org.dromara.common.oss.properties.OssProperties; +import org.dromara.system.domain.SysOssConfig; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface SysOssConfigClassConvert { + + SysOssConfigClassConvert INSTANCE = Mappers.getMapper(SysOssConfigClassConvert.class); + + OssProperties sysOssConfigToossProperties(SysOssConfig sysOssConfig); + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java index af88898..7f73d34 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java @@ -47,4 +47,9 @@ */ private String service; + /** + * 涓存椂瀵嗙爜 + */ + private String password; + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java index 011254e..7dbf330 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java @@ -46,7 +46,7 @@ * 鐢ㄦ埛鏄电О */ @Xss(message = "鐢ㄦ埛鏄电О涓嶈兘鍖呭惈鑴氭湰瀛楃") - @NotBlank(message = "鐢ㄦ埛鏄电О涓嶈兘涓虹┖") +// @NotBlank(message = "鐢ㄦ埛鏄电О涓嶈兘涓虹┖") @Size(min = 0, max = 30, message = "鐢ㄦ埛鏄电О闀垮害涓嶈兘瓒呰繃{max}涓瓧绗�") private String nickName; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java index 11e0ff8..d8bbba9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java @@ -25,4 +25,9 @@ */ private String ossId; + /** + * 瀵嗙爜 + */ + private String password; + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java index 8d5c429..cc184e0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java @@ -68,5 +68,10 @@ */ private String service; + /** + * 瀵嗙爜 + */ + private String password; + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java new file mode 100644 index 0000000..3957c93 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java @@ -0,0 +1,20 @@ +package org.dromara.system.enums; + +/** + * 涓夋柟瑙掕壊鍖哄垎 + */ +public enum RoleType { + + INTERNET("1719598385997795330"), //浜掕仈缃� + VIDEO("1719598772146393089"), //瑙嗛涓撶綉 + POLICE("1719598977939918850"); //鍏畨鍐呯綉 + private final String type; + + + RoleType(String id) { + this.type = id; + } + public String getType(){ + return type; + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java index 27dad7d..04c2ea9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java @@ -1,11 +1,26 @@ package org.dromara.system.runner; +import com.amazonaws.services.s3.AmazonS3; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.oss.core.OssClient; +import org.dromara.common.oss.factory.OssFactory; +import org.dromara.common.oss.properties.OssProperties; +import org.dromara.common.redis.utils.QueueUtils; +import org.dromara.system.convert.SysOssConfigClassConvert; +import org.dromara.system.domain.SysOssConfig; +import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.mapper.SysOssConfigMapper; +import org.dromara.system.mapper.SysOssMapper; import org.dromara.system.service.ISysOssConfigService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.system.service.ISysOssService; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.stream.Collectors; /** * 鍒濆鍖� system 妯″潡瀵瑰簲涓氬姟鏁版嵁 @@ -18,11 +33,28 @@ public class SystemApplicationRunner implements ApplicationRunner { private final ISysOssConfigService ossConfigService; + private final SysOssMapper ossMapper; + private final SysOssConfigMapper sysOssConfigMapper; +// private final AmazonS3 client; @Override public void run(ApplicationArguments args) throws Exception { ossConfigService.init(); + //鍒濆鍖杘ssclient + List<SysOssConfig> collect = sysOssConfigMapper.selectList().stream().filter(e -> e.getStatus().equals("0")) + .collect(Collectors.toList()); + OssProperties properties = SysOssConfigClassConvert.INSTANCE.sysOssConfigToossProperties(collect.get(0)); + OssClient client = new OssClient("minio",properties); log.info("鍒濆鍖朞SS閰嶇疆鎴愬姛"); + log.info("閫氶亾: {} 鐩戝惉涓�......", "OSS"); + // 椤圭洰鍒濆鍖栬缃竴娆″嵆鍙� + QueueUtils.subscribeBlockingQueue("OSS", (String ossId) -> { + // 瑙傚療鎺ユ敹鏃堕棿 + log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", "OSS", ossId); + SysOssVo vo = ossMapper.selectVoById(ossId); + client.delete( vo.getUrl()); + ossMapper.deleteById(Long.valueOf(ossId)); + }); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java index 2dfe01f..bb53158 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java @@ -1,7 +1,9 @@ package org.dromara.system.service; +import org.dromara.common.core.domain.R; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.system.domain.bo.SysOssBo; import org.dromara.system.domain.vo.SysOssVo; import jakarta.servlet.http.HttpServletResponse; @@ -27,10 +29,14 @@ SysOssVo upload(MultipartFile file); - SysOssVo upload(File file); + SysOssVo upload2(SynchronousRequest request); + +// SysOssVo upload(File file); void download(Long ossId, HttpServletResponse response) throws IOException; - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); + Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password); + + R viewPasswordById(Long ossId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index f0e12f6..45f98aa 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java @@ -3,10 +3,15 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json.Json; import org.dromara.common.core.constant.CacheNames; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.OssService; import org.dromara.common.core.utils.MapstructUtils; @@ -17,9 +22,11 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.oss.core.OssClient; +import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.enumd.AccessPolicyType; import org.dromara.common.oss.factory.OssFactory; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.SysOss; import org.dromara.system.domain.bo.SysOssBo; import org.dromara.system.domain.vo.SysOssVo; @@ -27,6 +34,8 @@ import org.dromara.system.service.ISysOssService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.dromara.system.uitil.HttpUtils; +import org.dromara.system.uitil.PasswordUtil; import org.jetbrains.annotations.NotNull; import org.springframework.cache.annotation.Cacheable; import org.springframework.http.MediaType; @@ -85,6 +94,7 @@ private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery(); + lqw.select(SysOss.class,x->get(x.getColumn())); lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName()); lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName()); lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix()); @@ -93,8 +103,15 @@ SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); - lqw.orderByAsc(SysOss::getOssId); + lqw.orderByDesc(SysOss::getCreateTime); return lqw; + } + + public boolean get(String str){ + if(str.equals("password") || str.equals("url") || str.equals("file_name")){ + return false; + } + return true; } @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId") @@ -133,34 +150,98 @@ throw new ServiceException(e.getMessage()); } // 淇濆瓨鏂囦欢淇℃伅 - return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); + return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult, file); } + /** + * 鍚屾 + * @param + * @param + * @return + */ @Override - public SysOssVo upload(File file) { - String originalfileName = file.getName(); + public SysOssVo upload2(SynchronousRequest request) { + String originalfileName = request.getFile().getOriginalFilename(); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); OssClient storage = OssFactory.instance(); - UploadResult uploadResult = storage.uploadSuffix(file, suffix); + UploadResult uploadResult; + try { + uploadResult = storage.uploadSuffix2(request.getFile().getBytes(), request.getPath(), request.getFile().getContentType()); + } catch (IOException e) { + throw new ServiceException(e.getMessage()); + } // 淇濆瓨鏂囦欢淇℃伅 - return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); + return buildResultEntity2(originalfileName, suffix, storage.getConfigKey(), uploadResult,request.getOssId(), + request.getPassword(), request.getCreateTime(), request.getCreateBy()); } +// @Override +// public SysOssVo upload(File file) { +// String originalfileName = file.getName(); +// String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); +// OssClient storage = OssFactory.instance(); +// UploadResult uploadResult = storage.uploadSuffix(file, suffix); +// // 淇濆瓨鏂囦欢淇℃伅 +// return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); +// } + @NotNull - private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult) { + private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult, MultipartFile file) { SysOss oss = new SysOss(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(configKey); + oss.setPassword(PasswordUtil.randomPassword(6)); + baseMapper.insert(oss); + //鎷兼帴鍚屾淇℃伅 + SynchronousRequest request = new SynchronousRequest(); + request.setFile(file); + request.setPath(uploadResult.getFilename()); + request.setCreateTime(oss.getCreateTime()); + request.setPassword(oss.getPassword()); + request.setCreateBy(String.valueOf(oss.getCreateBy())); + request.setOssId(String.valueOf(oss.getOssId())); +// post(request); + + SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class); + return this.matchingUrl(sysOssVo); + } + + /** + * 鍚屾 + * @param originalfileName + * @param suffix + * @param configKey + * @param uploadResult + * @param ossId + * @param password + * @param createTime + * @param createBy + * @return + */ + @NotNull + private SysOssVo buildResultEntity2(String originalfileName, String suffix, String configKey, + UploadResult uploadResult, String ossId, String password, + Date createTime, String createBy) { + SysOss oss = new SysOss(); + oss.setOssId(Long.valueOf(ossId)); + oss.setUrl(uploadResult.getUrl()); + oss.setFileSuffix(suffix); + oss.setFileName(uploadResult.getFilename()); + oss.setOriginalName(originalfileName); + oss.setService(configKey); + oss.setPassword(password); + oss.setCreateTime(createTime); + oss.setCreateBy(Long.valueOf(createBy)); baseMapper.insert(oss); SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class); return this.matchingUrl(sysOssVo); } @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password) { if (isValid) { // 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� } @@ -168,8 +249,26 @@ for (SysOss sysOss : list) { OssClient storage = OssFactory.instance(sysOss.getService()); storage.delete(sysOss.getUrl()); + if(sysOss.getPassword().equals(password)){ + baseMapper.deleteById(sysOss.getOssId()); + return true; + } + return false; } - return baseMapper.deleteBatchIds(ids) > 0; + return true; + } + + @Override + public R viewPasswordById(Long ossId) { + LoginUser loginUser = LoginHelper.getLoginUser(); + SysOss oss = baseMapper.selectById(ossId); + if(oss == null){ + return R.fail("鏂囦欢宸茶娓呯悊锛岃鑱旂郴绠$悊鍛橈紒"); + } + if(!oss.getCreateBy().equals(loginUser.getUserId())){ + return R.fail("鎮ㄦ病鏈夋潈闄愭煡鐪嬶紒"); + } + return R.ok(oss.getPassword()); } /** @@ -186,4 +285,24 @@ } return oss; } + + private String post(SynchronousRequest request){ + HashMap<String, String> headers = new HashMap<>(3); + String requestUrl = "http://192.168.3.43:8080/resource/oss/synchronization"; + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = ""; + try { + // 灏咼ava瀵硅薄杞崲涓篔SON瀛楃涓� + jsonString = objectMapper.writeValueAsString(request); + System.out.println(jsonString); + } catch (Exception e) { + e.printStackTrace(); + } + headers.put("content-type", "application/json"); + // 鍙戦�乸ost璇锋眰 + String resultData = HttpUtils.sendPostWithJson(requestUrl, jsonString,headers); + // 骞舵帴鏀惰繑鍥炵粨鏋� + System.out.println(resultData); + return resultData; + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java new file mode 100644 index 0000000..fa82fe5 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java @@ -0,0 +1,49 @@ +package org.dromara.system.uitil; + +import cn.hutool.core.util.IdUtil; +import org.dromara.common.core.domain.model.LoginBody; +import org.dromara.common.core.domain.model.RegisterBody; +import org.dromara.system.domain.bo.SysUserBo; + +/** + * 鑷姩鐧诲綍宸ュ叿绫� + */ +public class AutoLoginUtil { + + //榛樿瀵嗙爜 + private static String PASSWORD = "123456"; + //榛樿绠$悊 + private static String TENANT_ID = "000000"; + + /** + * 濉厖娉ㄥ唽 + * + * @param user + */ + public static void padding(RegisterBody user) { + String uuid = IdUtil.simpleUUID(); + user.setTenantId(TENANT_ID); + user.setPassword(PASSWORD); + user.setUserType("sys_user"); + user.setUuid(uuid); + + } + + /** + * 濉厖鐢ㄦ埛鐧诲綍淇℃伅 + * + * @return + */ + public static LoginBody create(RegisterBody user, String clientId) { + String uuid = IdUtil.simpleUUID(); + LoginBody loginBody = new LoginBody(); + loginBody.setClientId(clientId); + loginBody.setPassword(PASSWORD); + loginBody.setGrantType("password"); + loginBody.setTenantId(TENANT_ID); + loginBody.setUsername(user.getUsername()); + loginBody.setUuid(uuid); + return loginBody; + } + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java new file mode 100644 index 0000000..d3fb7aa --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java @@ -0,0 +1,42 @@ +package org.dromara.system.uitil; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.StringRequestEntity; + +import java.util.HashMap; + +public class HttpUtils { + public static String sendPostWithJson(String url, String jsonStr, HashMap<String,String> headers) { + // 杩斿洖鐨勭粨鏋� + String jsonResult = ""; + try { + HttpClient client = new HttpClient(); + // 杩炴帴瓒呮椂 + client.getHttpConnectionManager().getParams().setConnectionTimeout(3*1000); + // 璇诲彇鏁版嵁瓒呮椂 + client.getHttpConnectionManager().getParams().setSoTimeout(3*60*1000); + client.getParams().setContentCharset("UTF-8"); + PostMethod postMethod = new PostMethod(url); + + postMethod.setRequestHeader("content-type", headers.get("content-type")); + + // 闈炵┖ + if (null != jsonStr && !"".equals(jsonStr)) { + StringRequestEntity requestEntity = new StringRequestEntity(jsonStr, headers.get("content-type"), "UTF-8"); + postMethod.setRequestEntity(requestEntity); + } + int status = client.executeMethod(postMethod); + if (status == HttpStatus.SC_OK) { + jsonResult = postMethod.getResponseBodyAsString(); + } else { + throw new RuntimeException("鎺ュ彛杩炴帴澶辫触锛�"); + } + } catch (Exception e) { + throw new RuntimeException("鎺ュ彛杩炴帴澶辫触锛�"); + } + return jsonResult; + } +} + diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java new file mode 100644 index 0000000..51dfa36 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java @@ -0,0 +1,226 @@ +package org.dromara.system.uitil; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 鑾峰彇瀹㈡埛绔痠p鍜宮ac鍦板潃 + * + * @date 2023/06/27 + */ +@Slf4j +public final class IpMacUtil { + private IpMacUtil() { + } + + /** + * 鑾峰彇鐢ㄦ埛鐪熷疄IP鍦板潃锛屼笉浣跨敤request.getRemoteAddr();鐨勫師鍥犳槸鏈夊彲鑳界敤鎴蜂娇鐢ㄤ簡浠g悊杞欢鏂瑰紡閬垮厤鐪熷疄IP鍦板潃, + * 鍙傝�冩枃绔狅細 http://developer.51cto.com/art/201111/305181.htm + * <p> + * 鍙槸锛屽鏋滈�氳繃浜嗗绾у弽鍚戜唬鐞嗙殑璇濓紝X-Forwarded-For鐨勫�煎苟涓嶆涓�涓紝鑰屾槸涓�涓睮P鍊硷紝绌剁珶鍝釜鎵嶆槸鐪熸鐨勭敤鎴风鐨勭湡瀹濱P鍛紵 + * 绛旀鏄彇X-Forwarded-For涓涓�涓潪unknown鐨勬湁鏁圛P瀛楃涓层�� + * <p> + * 濡傦細X-Forwarded-For锛�192.168.1.110, 192.168.1.120, 192.168.1.130, + * 192.168.1.100 + * <p> + * 鐢ㄦ埛鐪熷疄IP涓猴細 192.168.1.110 + * + * @param request + * @return + */ + @SuppressWarnings("all") + public static String getIpAddress(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + /** + * 鑾峰彇瀹㈡埛绔疘P锛屾敮鎸佸弽鍚戜唬鐞嗭紝濡俷ginx锛屼絾涓嶆敮鎸佹鍚戜唬鐞嗭紝姣斿瀹㈡埛绔祻瑙堝櫒鑷繁浣跨敤浠g悊宸ュ叿 + * + * @param request 璇锋眰 + * @return 瀹㈡埛绔疘P + */ + @SuppressWarnings("all") + public static String getClientIP(HttpServletRequest request) { + String ip = request.getHeader("X-Real-IP"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + /** + * 浠庣被unix鏈哄櫒涓婅幏鍙杕ac鍦板潃 + * + * @param ip ipv4鍦板潃 + * @return mac + */ + public static String getMacInLinux(String ip) { + String mac = ""; + if (ip != null) { + try { + Process process = Runtime.getRuntime().exec("arp " + ip); + InputStreamReader ir = new InputStreamReader(process.getInputStream()); + LineNumberReader input = new LineNumberReader(ir); + String line; + StringBuffer s = new StringBuffer(); + while ((line = input.readLine()) != null) { + s.append(line); + } + mac = s.toString(); + if (StringUtils.isNotBlank(mac)) { + mac = mac.substring(mac.indexOf(":") - 2, mac.lastIndexOf(":") + 3); + } + return mac; + } catch (Exception e) { + log.error("---> 鑾峰彇mac鍦板潃閿欒锛歿}", e.getMessage()); + } + } + return mac; + } + + /** + * 浠巜indows鏈哄櫒涓婅幏鍙杕ac鍦板潃 + * + * @param ip ipv4鍦板潃 + * @return mac + */ + public static String getMacInWindows(final String ip) { + String result; + String[] cmd = {"cmd", "/c", "ping " + ip}; + String[] another = {"cmd", "/c", "ipconfig -all"}; + // 鑾峰彇鎵ц鍛戒护鍚庣殑result + String cmdResult = callCmd(cmd, another); + // 浠庝笂涓�姝ョ殑缁撴灉涓幏鍙杕ac鍦板潃 + result = filterMacAddress(ip, cmdResult, "-"); + return result; + } + + /** + * 鍛戒护鎵ц + * + * @param cmd 鍛戒护 + * @param another another + * @return 缁撴灉 + */ + public static String callCmd(String[] cmd, String[] another) { + StringBuilder result = new StringBuilder(); + String line; + try { + Runtime rt = Runtime.getRuntime(); + // 鎵ц绗竴涓懡浠� + Process proc = rt.exec(cmd); + proc.waitFor(); + // 鎵ц绗簩涓懡浠� + proc = rt.exec(another); + InputStreamReader is = new InputStreamReader(proc.getInputStream()); + BufferedReader br = new BufferedReader(is); + while ((line = br.readLine()) != null) { + result.append(line); + } + } catch (Exception e) { + log.error("---> 鎵ц鑾峰彇mac鍦板潃鍛戒护閿欒锛歿}", e.getMessage()); + } + return result.toString(); + } + + /** + * 鑾峰彇mac鍦板潃 + * + * @param ip ip鍦板潃 + * @param sourceString s + * @param macSeparator s + * @return mac + */ + @SuppressWarnings("all") + public static String filterMacAddress(final String ip, final String sourceString, final String macSeparator) { + String result = ""; + String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})"; + Pattern pattern = Pattern.compile(regExp); + Matcher matcher = pattern.matcher(sourceString); + while (matcher.find()) { + result = matcher.group(1); + // 鍥犺绠楁満澶氱綉鍗¢棶棰橈紝鎴彇绱ч潬IP鍚庣殑绗竴涓猰ac鍦板潃 + //int num = sourceString.indexOf(ip) - sourceString.indexOf(": " + result + " "); + //if (num > 0 && num < 300) { + //break; + //} + if (sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) { + break; //濡傛灉鏈夊涓狪P,鍙尮閰嶆湰IP瀵瑰簲鐨凪ac. + } + } + return result; + } + + public static String commond(String cmd) throws IOException { + Process process = Runtime.getRuntime().exec(cmd); + InputStream inputStream = process.getInputStream(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder stringBuilder = new StringBuilder(); + String line = null; + while ((line = bufferedReader.readLine()) != null) { + stringBuilder.append(line); + } + return stringBuilder.toString(); + } + + @SuppressWarnings("all") + public static String getMacByIP(String ipAddress) { + try { + String result; + // 鑾峰彇褰撳墠绯荤粺 + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { + result = commond("ping -n 2 " + ipAddress); + if (result.contains("TTL") || result.contains("Ping")) { + result = commond("arp -a " + ipAddress); + } + } else { + result = commond("ping -c 2 " + ipAddress); + if (result.contains("TTL") || result.contains("ttl") || result.contains("statistics")) { + result = commond("arp -a " + ipAddress); + } + } + String regExp = "([0-9A-Fa-f]{2})([-:][0-9A-Fa-f]{2}){5}"; + Pattern pattern = Pattern.compile(regExp); + Matcher matcher = pattern.matcher(result); + StringBuilder stringBuilder = new StringBuilder(); + while (matcher.find()) { + String temp = matcher.group(); + stringBuilder.append(temp); + } + return stringBuilder.toString(); + } catch (Exception e) { + return null; + } + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java new file mode 100644 index 0000000..ed339de --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java @@ -0,0 +1,109 @@ +package org.dromara.system.uitil; + + +import java.util.*; + +/** + * 闅忔満瀵嗙爜鐢熸垚宸ュ叿 * + */ +public class PasswordUtil { + + // 鐗规畩瀛楃 + private static final String SPECIAL_CHARS = "ABCDEFGHJKMNPRSTUVWXYZ"; + // 鍘绘帀I銆丩銆丱銆丵鏄撴贩娣嗗瓧绗� + private static final String UPPER_WORD_CHARS = "ABCDEFGHJKMNPRSTUVWXYZ"; + // 鍘绘帀i銆乴銆乷銆乹鏄撴贩娣嗗瓧绗� + private static final String LOWER_WORD_CHARS = "abcdefghjkmnprstuvwxyz"; + // 鍘绘帀1銆�0鏄撴贩娣嗗瓧绗� + private static final String NUMBER_CHARS = "23456789"; + + + /** + * 鐢熸垚鍥哄畾闀垮害鐨勫鏉傚瘑鐮� + * @param length + * @return + */ + public static String randomPassword(int length){ + return randomPassword(length,true,true,true,true); + } + + /** + * @param length 鐢熸垚瀵嗙爜鐨勯暱搴� 寤鸿鑷冲皯6浣� + * @param isLowerWord 鏄惁鍖呭惈灏忓啓瀛楁瘝 + * @param isUpperWord 鏄惁鍖呭惈澶у啓瀛楁瘝 + * @param isSpecialChar 鏄惁鍖呭惈鐗规畩瀛楃 + * @param isNum 鏄惁鍖呭惈鏁板瓧 + * @return String 闅忔満瀵嗙爜 + * @description: 鐢熸垚闅忔満瀵嗙爜鐨勫伐鍏锋柟娉� + */ + public static String randomPassword(int length, Boolean isLowerWord, Boolean isUpperWord, Boolean isSpecialChar, Boolean isNum) { + Random rnd = new Random(); + // 鍏堝彇蹇呭~椤�1涓� + Map<Integer, String> map = new HashMap<>(); + if (isLowerWord) { + map.put(1, LOWER_WORD_CHARS); + } + if (isUpperWord) { + map.put(2, UPPER_WORD_CHARS); + } + if (isSpecialChar) { + map.put(3, SPECIAL_CHARS); + } + if (isNum) { + map.put(4, NUMBER_CHARS); + } + StringBuilder sb = new StringBuilder(); + for (Map.Entry<Integer, String> entry : map.entrySet()) { + String value = entry.getValue(); + sb.append(value.charAt(rnd.nextInt(value.length()))); + } + char[] chars = new char[length - sb.length()]; + for (int i = 0; i < length - sb.length(); i++) { + chars[i] = nextChar(rnd, isLowerWord, isUpperWord, isSpecialChar, isNum); + } + StringBuilder resultSb = sb.append(new String(chars)); + // 瀵圭粨鏋滄暟鎹贡搴忓鐞嗭紙鍓嶉潰鍥哄畾鏀惧埌鍓嶅嚑涓簡锛屾晠闇�涔卞簭锛� + String[] split = resultSb.toString().split(""); + List<String> strings = Arrays.asList(split); + Collections.shuffle(strings); + StringBuilder stringBuilder = new StringBuilder(strings.size()); + strings.forEach(stringBuilder::append); + return stringBuilder.toString(); + } + + + private static char nextChar(Random rnd, Boolean isLowerWord, Boolean isUpperWord, Boolean isSpecialChar, Boolean isNum) { + List<Integer> list = new ArrayList<>(); + if (isLowerWord) { + list.add(1); + } + if (isUpperWord) { + list.add(2); + } + if (isSpecialChar) { + list.add(3); + } + if (isNum) { + list.add(4); + } + if (list.size() == 0) { + // 榛樿鏁板瓧瀵嗙爜 + list.add(4); + } + + // 闅忔満list绱㈠紩 + int index = rnd.nextInt(list.size()); + Integer integer = list.get(index); + switch (integer) { + case 1: + return LOWER_WORD_CHARS.charAt(rnd.nextInt(LOWER_WORD_CHARS.length())); + case 2: + return UPPER_WORD_CHARS.charAt(rnd.nextInt(UPPER_WORD_CHARS.length())); + case 3: + return SPECIAL_CHARS.charAt(rnd.nextInt(SPECIAL_CHARS.length())); + default: + return NUMBER_CHARS.charAt(rnd.nextInt(NUMBER_CHARS.length())); + } + } + +} -- Gitblit v1.8.0