From aec0e227479de49213185ff6bb98d4e99b35eb8b Mon Sep 17 00:00:00 2001 From: thiszhc <2029364173@qq.com> Date: 星期五, 16 六月 2023 20:34:23 +0800 Subject: [PATCH] Merge branch '5.X' of https://gitee.com/dromara/RuoYi-Vue-Plus into JustAuth --- ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/factory/YmlPropertySourceFactory.java | 31 ++ ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 2 ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsConfig.java | 35 -- ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java | 26 - pom.xml | 17 ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/properties/SpringDocProperties.java | 4 ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/SpringDocConfig.java | 16 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java | 4 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ServletUtils.java | 43 +++ ruoyi-common/ruoyi-common-sms/pom.xml | 21 ruoyi-modules/ruoyi-demo/pom.xml | 10 ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java | 3 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ValidatorConfig.java | 25 + ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml | 11 ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java | 19 ruoyi-admin/src/main/resources/application.yml | 58 --- README.md | 2 ruoyi-common/ruoyi-common-mybatis/src/main/resources/common-mybatis.yml | 33 ++ /dev/null | 19 - ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java | 3 ruoyi-admin/src/main/resources/application-prod.yml | 33 + ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java | 3 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java | 44 +-- ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/MessageUtils.java | 7 ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/properties/SmsProperties.java | 64 +--- ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java | 7 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java | 2 ruoyi-common/ruoyi-common-core/pom.xml | 5 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java | 10 ruoyi-admin/src/main/resources/application-dev.yml | 181 +------------ 30 files changed, 295 insertions(+), 443 deletions(-) diff --git a/README.md b/README.md index eb82295..6696573 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ | 鍒嗗竷寮忎换鍔¤皟搴� | 閲囩敤 Xxl-Job 澶╃敓鏀寔鍒嗗竷寮� 缁熶竴鐨勭鐞嗕腑蹇� | 閲囩敤 Quartz 鍩轰簬鏁版嵁搴撻攣鎬ц兘宸� 闆嗙兢闇�瑕佸仛寰堝閰嶇疆涓庢敼閫� | | 鏂囦欢瀛樺偍 | 閲囩敤 Minio 鍒嗗竷寮忔枃浠跺瓨鍌� 澶╃敓鏀寔澶氭満銆佸纭洏銆佸鍒嗙墖銆佸鍓湰瀛樺偍<br/>鏀寔鏉冮檺绠$悊 瀹夊叏鍙潬 鏂囦欢鍙姞瀵嗗瓨鍌� | 閲囩敤 鏈満鏂囦欢瀛樺偍 鏂囦欢瑁告紡 鏄撲涪澶辨硠婕� 涓嶆敮鎸侀泦缇ゆ湁鍗曠偣鏁堝簲 | | 浜戝瓨鍌� | 閲囩敤 AWS S3 鍗忚瀹㈡埛绔� 鏀寔 涓冪墰銆侀樋閲屻�佽吘璁� 绛変竴鍒囨敮鎸丼3鍗忚鐨勫巶瀹� | 涓嶆敮鎸� | -| 鐭俊 | 鏀寔 闃块噷銆佽吘璁� 鍙渶鍦▂ml閰嶇疆濂藉巶瀹跺瘑閽ュ嵆鍙娇鐢� 鎺ュ彛鍖栨敮鎸佹墿灞曞叾浠栧巶瀹� | 涓嶆敮鎸� | +| 鐭俊 | 閲囩敤 sms4j 鐭俊铻嶅悎鍖� 鏀寔鏁板崄绉嶇煭淇″巶瀹� 鍙渶鍦▂ml閰嶇疆濂藉巶瀹跺瘑閽ュ嵆鍙娇鐢� 鍙鍘傚鍏辩敤 | 涓嶆敮鎸� | | 閭欢 | 閲囩敤 mail-api 閫氱敤鍗忚鏀寔澶ч儴鍒嗛偖浠跺巶鍟� | 涓嶆敮鎸� | | 鎺ュ彛鏂囨。 | 閲囩敤 SpringDoc銆乯avadoc 鏃犳敞瑙i浂鍏ヤ镜鍩轰簬java娉ㄩ噴<br/>鍙渶鎶婃敞閲婂啓濂� 鏃犻渶鍐嶅啓涓�澶у爢鐨勬枃妗f敞瑙d簡 | 閲囩敤 Springfox 宸插仠姝㈢淮鎶� 闇�瑕佺紪鍐欏ぇ閲忕殑娉ㄨВ鏉ユ敮鎸佹枃妗g敓鎴� | | 鏍¢獙妗嗘灦 | 閲囩敤 Validation 鏀寔娉ㄨВ涓庡伐鍏风被鏍¢獙 娉ㄨВ鏀寔鍥介檯鍖� | 浠呮敮鎸佹敞瑙� 涓旀敞瑙d笉鏀寔鍥介檯鍖� | diff --git a/pom.xml b/pom.xml index e69ab15..dfcfa75 100644 --- a/pom.xml +++ b/pom.xml @@ -49,8 +49,7 @@ <!-- OSS 閰嶇疆 --> <aws-java-sdk-s3.version>1.12.400</aws-java-sdk-s3.version> <!-- SMS 閰嶇疆 --> - <aliyun.sms.version>2.0.23</aliyun.sms.version> - <tencent.sms.version>3.1.687</tencent.sms.version> + <sms4j.version>2.1.1</sms4j.version> <!-- 鎻掍欢鐗堟湰 --> <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> @@ -242,17 +241,11 @@ <artifactId>aws-java-sdk-s3</artifactId> <version>${aws-java-sdk-s3.version}</version> </dependency> - + <!--鐭俊sms4j--> <dependency> - <groupId>com.aliyun</groupId> - <artifactId>dysmsapi20170525</artifactId> - <version>${aliyun.sms.version}</version> - </dependency> - - <dependency> - <groupId>com.tencentcloudapi</groupId> - <artifactId>tencentcloud-sdk-java-sms</artifactId> - <version>${tencent.sms.version}</version> + <groupId>org.dromara.sms4j</groupId> + <artifactId>sms4j-spring-boot-starter</artifactId> + <version>${sms4j.version}</version> </dependency> <dependency> diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java index dd9fa19..70d79ca 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java @@ -14,11 +14,12 @@ import org.dromara.common.mail.config.properties.MailProperties; import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.redis.utils.RedisUtils; -import org.dromara.common.sms.config.properties.SmsProperties; -import org.dromara.common.sms.core.SmsTemplate; -import org.dromara.common.sms.entity.SmsResult; import org.dromara.common.web.config.properties.CaptchaProperties; import org.dromara.common.web.enums.CaptchaType; +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; +import org.dromara.sms4j.provider.enumerate.SupplierType; import org.dromara.web.domain.vo.CaptchaVo; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; @@ -31,8 +32,7 @@ import org.springframework.web.bind.annotation.RestController; import java.time.Duration; -import java.util.HashMap; -import java.util.Map; +import java.util.LinkedHashMap; /** * 楠岃瘉鐮佹搷浣滃鐞� @@ -47,7 +47,6 @@ public class CaptchaController { private final CaptchaProperties captchaProperties; - private final SmsProperties smsProperties; private final MailProperties mailProperties; /** @@ -57,21 +56,18 @@ */ @GetMapping("/resource/sms/code") public R<Void> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) { - if (!smsProperties.getEnabled()) { - return R.fail("褰撳墠绯荤粺娌℃湁寮�鍚煭淇″姛鑳斤紒"); - } String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber; String code = RandomUtil.randomNumbers(4); RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION)); // 楠岃瘉鐮佹ā鏉縤d 鑷澶勭悊 (鏌ユ暟鎹簱鎴栧啓姝诲潎鍙�) String templateId = ""; - Map<String, String> map = new HashMap<>(1); + LinkedHashMap<String, String> map = new LinkedHashMap<>(1); map.put("code", code); - SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class); - SmsResult result = smsTemplate.send(phonenumber, templateId, map); - if (!result.isSuccess()) { - log.error("楠岃瘉鐮佺煭淇″彂閫佸紓甯� => {}", result); - return R.fail(result.getMessage()); + SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA); + SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, templateId, map); + if (!"OK".equals(smsResponse.getCode())) { + log.error("楠岃瘉鐮佺煭淇″彂閫佸紓甯� => {}", smsResponse); + return R.fail(smsResponse.getMessage()); } return R.ok(); } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java index 84c554d..479c390 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java @@ -345,7 +345,7 @@ private SysUserVo loadUserByEmail(String tenantId, String email) { SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() - .select(SysUser::getPhonenumber, SysUser::getStatus) + .select(SysUser::getEmail, SysUser::getStatus) .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId) .eq(SysUser::getEmail, email)); if (ObjectUtil.isNull(user)) { @@ -414,25 +414,24 @@ String errorKey = GlobalConstants.PWD_ERR_CNT_KEY + username; String loginFail = Constants.LOGIN_FAIL; - // 鑾峰彇鐢ㄦ埛鐧诲綍閿欒娆℃暟(鍙嚜瀹氫箟闄愬埗绛栫暐 渚嬪: key + username + ip) - Integer errorNumber = RedisUtils.getCacheObject(errorKey); + // 鑾峰彇鐢ㄦ埛鐧诲綍閿欒娆℃暟锛岄粯璁や负0 (鍙嚜瀹氫箟闄愬埗绛栫暐 渚嬪: key + username + ip) + int errorNumber = ObjectUtil.defaultIfNull(RedisUtils.getCacheObject(errorKey), 0); // 閿佸畾鏃堕棿鍐呯櫥褰� 鍒欒涪鍑� - if (ObjectUtil.isNotNull(errorNumber) && errorNumber.equals(maxRetryCount)) { + if (errorNumber >= maxRetryCount) { recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); } if (supplier.get()) { - // 鏄惁绗竴娆� - errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1; + // 閿欒娆℃暟閫掑 + errorNumber++; + RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime)); // 杈惧埌瑙勫畾閿欒娆℃暟 鍒欓攣瀹氱櫥褰� - if (errorNumber.equals(maxRetryCount)) { - RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime)); + if (errorNumber >= maxRetryCount) { recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); } else { - // 鏈揪鍒拌瀹氶敊璇鏁� 鍒欓�掑 - RedisUtils.setCacheObject(errorKey, errorNumber); + // 鏈揪鍒拌瀹氶敊璇鏁� recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber)); throw new UserException(loginType.getRetryLimitCount(), errorNumber); } diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 78cad6e..5adc8ae 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -158,162 +158,29 @@ # Socket杩炴帴瓒呮椂鍊硷紝鍗曚綅姣锛岀己鐪佸�间笉瓒呮椂 connectionTimeout: 0 ---- # sms 鐭俊 +--- # sms 鐭俊 鏀寔 闃块噷浜� 鑵捐浜� 浜戠墖 绛夌瓑鍚勫紡鍚勬牱鐨勭煭淇℃湇鍔″晢 +# https://wind.kim/doc/start 鏂囨。鍦板潃 鍚勪釜鍘傚晢鍙悓鏃朵娇鐢� sms: - enabled: false # 闃块噷浜� dysmsapi.aliyuncs.com - # 鑵捐浜� sms.tencentcloudapi.com - endpoint: "dysmsapi.aliyuncs.com" - accessKeyId: xxxxxxx - accessKeySecret: xxxxxx - signName: 娴嬭瘯 - # 鑵捐涓撶敤 - sdkAppId: - -justauth: - enabled: true - type: - QQ: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/qq/callback - union-id: false - WEIBO: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/weibo/callback - gitee: - client-id: 38eaaa1b77b5e064313057a2f5745ce3a9f3e7686d9bd302c7df2f308ef6db81 - client-secret: 2e633af8780cb9fe002c4c7291b722db944402e271efb99b062811f52d7da1ff - redirect-uri: http://localhost:8888/social-login?source=gitee - DINGTALK: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/dingtalk/callback - BAIDU: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/baidu/callback - CSDN: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/csdn/callback - CODING: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/coding/callback - coding-group-name: xx - OSCHINA: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/oschina/callback - ALIPAY: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/alipay/callback - alipay-public-key: MIIB**************DAQAB - WECHAT_OPEN: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_open/callback - WECHAT_MP: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_mp/callback - WECHAT_ENTERPRISE: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_enterprise/callback - agent-id: 1000002 - TAOBAO: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/taobao/callback - GOOGLE: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/google/callback - FACEBOOK: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/facebook/callback - DOUYIN: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/douyin/callback - LINKEDIN: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/linkedin/callback - MICROSOFT: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/microsoft/callback - MI: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/mi/callback - TOUTIAO: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/toutiao/callback - TEAMBITION: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/teambition/callback - RENREN: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/renren/callback - PINTEREST: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/pinterest/callback - STACK_OVERFLOW: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/stack_overflow/callback - stack-overflow-key: asd*********asd - HUAWEI: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/huawei/callback - KUJIALE: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/kujiale/callback - GITLAB: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/gitlab/callback - MEITUAN: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/meituan/callback - ELEME: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/eleme/callback - TWITTER: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/twitter/callback - XMLY: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/xmly/callback - # 璁惧鍞竴鏍囪瘑ID - device-id: xxxxxxxxxxxxxx - # 瀹㈡埛绔搷浣滅郴缁熺被鍨嬶紝1-iOS绯荤粺锛�2-Android绯荤粺锛�3-Web - client-os-type: 3 - # 瀹㈡埛绔寘鍚嶏紝濡傛灉 clientOsType 涓�1鎴�2鏃跺繀濉�傚Android瀹㈡埛绔槸鍖呭悕锛屽IOS瀹㈡埛绔槸Bundle ID - #pack-id: xxxx - FEISHU: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/feishu/callback - JD: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: http://oauth.xkcoding.com/demo/oauth/jd/callback - + alibaba: + #璇锋眰鍦板潃 榛樿涓� dysmsapi.aliyuncs.com 濡傛棤鐗规畩鏀瑰彉鍙互涓嶇敤璁剧疆 + requestUrl: dysmsapi.aliyuncs.com + #闃块噷浜戠殑accessKey + accessKeyId: xxxxxxx + #闃块噷浜戠殑accessKeySecret + accessKeySecret: xxxxxxx + #鐭俊绛惧悕 + signature: 娴嬭瘯 + tencent: + #璇锋眰鍦板潃榛樿涓� sms.tencentcloudapi.com 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� + requestUrl: sms.tencentcloudapi.com + #鑵捐浜戠殑accessKey + accessKeyId: xxxxxxx + #鑵捐浜戠殑accessKeySecret + accessKeySecret: xxxxxxx + #鐭俊绛惧悕 + signature: 娴嬭瘯 + #鐭俊sdkAppId + sdkAppId: appid + #鍦板煙淇℃伅榛樿涓� ap-guangzhou 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� + territory: ap-guangzhou diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index e760823..4b29d1c 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -161,14 +161,29 @@ # Socket杩炴帴瓒呮椂鍊硷紝鍗曚綅姣锛岀己鐪佸�间笉瓒呮椂 connectionTimeout: 0 ---- # sms 鐭俊 +--- # sms 鐭俊 鏀寔 闃块噷浜� 鑵捐浜� 浜戠墖 绛夌瓑鍚勫紡鍚勬牱鐨勭煭淇℃湇鍔″晢 +# https://wind.kim/doc/start 鏂囨。鍦板潃 鍚勪釜鍘傚晢鍙悓鏃朵娇鐢� sms: - enabled: false # 闃块噷浜� dysmsapi.aliyuncs.com - # 鑵捐浜� sms.tencentcloudapi.com - endpoint: "dysmsapi.aliyuncs.com" - accessKeyId: xxxxxxx - accessKeySecret: xxxxxx - signName: 娴嬭瘯 - # 鑵捐涓撶敤 - sdkAppId: + alibaba: + #璇锋眰鍦板潃 榛樿涓� dysmsapi.aliyuncs.com 濡傛棤鐗规畩鏀瑰彉鍙互涓嶇敤璁剧疆 + requestUrl: dysmsapi.aliyuncs.com + #闃块噷浜戠殑accessKey + accessKeyId: xxxxxxx + #闃块噷浜戠殑accessKeySecret + accessKeySecret: xxxxxxx + #鐭俊绛惧悕 + signature: 娴嬭瘯 + tencent: + #璇锋眰鍦板潃榛樿涓� sms.tencentcloudapi.com 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� + requestUrl: sms.tencentcloudapi.com + #鑵捐浜戠殑accessKey + accessKeyId: xxxxxxx + #鑵捐浜戠殑accessKeySecret + accessKeySecret: xxxxxxx + #鐭俊绛惧悕 + signature: 娴嬭瘯 + #鐭俊sdkAppId + sdkAppId: appid + #鍦板煙淇℃伅榛樿涓� ap-guangzhou 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� + territory: ap-guangzhou diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 31d0de5..b68a3dc 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -96,20 +96,14 @@ sa-token: # token鍚嶇О (鍚屾椂涔熸槸cookie鍚嶇О) token-name: Authorization - # token鏈夋晥鏈� 璁句负涓�澶� (蹇呭畾杩囨湡) 鍗曚綅: 绉� - timeout: 86400 - # token涓存椂鏈夋晥鏈� (鎸囧畾鏃堕棿鏃犳搷浣滃氨杩囨湡) 鍗曚綅: 绉� + # token鍥哄畾瓒呮椂 璁句负涓冨ぉ (蹇呭畾杩囨湡) 鍗曚綅: 绉� + timeout: 604800 + # token娲昏穬瓒呮椂鏃堕棿 30鍒嗛挓(鎸囧畾鏃堕棿鏃犳搷浣滃垯杩囨湡) 鍗曚綅: 绉� activity-timeout: 1800 # 鏄惁鍏佽鍚屼竴璐﹀彿骞跺彂鐧诲綍 (涓簍rue鏃跺厑璁镐竴璧风櫥褰�, 涓篺alse鏃舵柊鐧诲綍鎸ゆ帀鏃х櫥褰�) is-concurrent: true # 鍦ㄥ浜虹櫥褰曞悓涓�璐﹀彿鏃讹紝鏄惁鍏辩敤涓�涓猼oken (涓簍rue鏃舵墍鏈夌櫥褰曞叡鐢ㄤ竴涓猼oken, 涓篺alse鏃舵瘡娆$櫥褰曟柊寤轰竴涓猼oken) is-share: false - # 鏄惁灏濊瘯浠巋eader閲岃鍙杢oken - is-read-header: true - # 鏄惁灏濊瘯浠巆ookie閲岃鍙杢oken - is-read-cookie: false - # token鍓嶇紑 - token-prefix: "Bearer" # jwt绉橀挜 jwt-secret-key: abcdefghijklmnopqrstuvwxyz @@ -156,39 +150,12 @@ mapperLocations: classpath*:mapper/**/*Mapper.xml # 瀹炰綋鎵弿锛屽涓猵ackage鐢ㄩ�楀彿鎴栬�呭垎鍙峰垎闅� typeAliasesPackage: org.dromara.**.domain - # 鍚姩鏃舵槸鍚︽鏌� MyBatis XML 鏂囦欢鐨勫瓨鍦紝榛樿涓嶆鏌� - checkConfigLocation: false - configuration: - # 鑷姩椹煎嘲鍛藉悕瑙勫垯锛坈amel case锛夋槧灏� - mapUnderscoreToCamelCase: true - # MyBatis 鑷姩鏄犲皠绛栫暐 - # NONE锛氫笉鍚敤 PARTIAL锛氬彧瀵归潪宓屽 resultMap 鑷姩鏄犲皠 FULL锛氬鎵�鏈� resultMap 鑷姩鏄犲皠 - autoMappingBehavior: FULL - # MyBatis 鑷姩鏄犲皠鏃舵湭鐭ュ垪鎴栨湭鐭ュ睘鎬у鐞嗙瓥 - # NONE锛氫笉鍋氬鐞� WARNING锛氭墦鍗扮浉鍏宠鍛� FAILING锛氭姏鍑哄紓甯稿拰璇︾粏淇℃伅 - autoMappingUnknownColumnBehavior: NONE - # 鏇磋缁嗙殑鏃ュ織杈撳嚭 浼氭湁鎬ц兘鎹熻�� org.apache.ibatis.logging.stdout.StdOutImpl - # 鍏抽棴鏃ュ織璁板綍 (鍙崟绾娇鐢� p6spy 鍒嗘瀽) org.apache.ibatis.logging.nologging.NoLoggingImpl - # 榛樿鏃ュ織杈撳嚭 org.apache.ibatis.logging.slf4j.Slf4jImpl - logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl global-config: - # 鏄惁鎵撳嵃 Logo banner - banner: true dbConfig: # 涓婚敭绫诲瀷 # AUTO 鑷 NONE 绌� INPUT 鐢ㄦ埛杈撳叆 ASSIGN_ID 闆姳 ASSIGN_UUID 鍞竴 UUID + # 濡傞渶鏀逛负鑷 闇�瑕佸皢鏁版嵁搴撹〃鍏ㄩ儴璁剧疆涓鸿嚜澧� idType: ASSIGN_ID - # 閫昏緫宸插垹闄ゅ�� - logicDeleteValue: 2 - # 閫昏緫鏈垹闄ゅ�� - logicNotDeleteValue: 0 - # 瀛楁楠岃瘉绛栫暐涔� insert,鍦� insert 鐨勬椂鍊欑殑瀛楁楠岃瘉绛栫暐 - # IGNORED 蹇界暐 NOT_NULL 闈濶ULL NOT_EMPTY 闈炵┖ DEFAULT 榛樿 NEVER 涓嶅姞鍏� SQL - insertStrategy: NOT_NULL - # 瀛楁楠岃瘉绛栫暐涔� update,鍦� update 鐨勬椂鍊欑殑瀛楁楠岃瘉绛栫暐 - updateStrategy: NOT_NULL - # 瀛楁楠岃瘉绛栫暐涔� select,鍦� select 鐨勬椂鍊欑殑瀛楁楠岃瘉绛栫暐鏃� wrapper 鏍规嵁鍐呴儴 entity 鐢熸垚鐨� where 鏉′欢 - where-strategy: NOT_NULL # 鏁版嵁鍔犲瘑 mybatis-encryptor: @@ -204,8 +171,13 @@ publicKey: privateKey: -# Swagger閰嶇疆 -swagger: +springdoc: + api-docs: + # 鏄惁寮�鍚帴鍙f枃妗� + enabled: true + swagger-ui: + # 鎸佷箙鍖栬璇佹暟鎹� + persistAuthorization: true info: # 鏍囬 title: '鏍囬锛�${ruoyi.name}澶氱鎴风鐞嗙郴缁焈鎺ュ彛鏂囨。' @@ -225,14 +197,6 @@ type: APIKEY in: HEADER name: ${sa-token.token-name} - -springdoc: - api-docs: - # 鏄惁寮�鍚帴鍙f枃妗� - enabled: true - swagger-ui: - # 鎸佷箙鍖栬璇佹暟鎹� - persistAuthorization: true #杩欓噷瀹氫箟浜嗕袱涓垎缁勶紝鍙畾涔夊涓紝涔熷彲浠ヤ笉瀹氫箟 group-configs: - group: 1.婕旂ず妯″潡 diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index 8f3740f..33f9f7f 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -34,6 +34,11 @@ <artifactId>spring-boot-starter-validation</artifactId> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-aop</artifactId> + </dependency> + <!--甯哥敤宸ュ叿绫� --> <dependency> <groupId>org.apache.commons</groupId> diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java index de9a9bc..9a32afe 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/AsyncConfig.java @@ -2,16 +2,14 @@ import cn.hutool.core.util.ArrayUtil; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.SpringUtils; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import java.util.Arrays; import java.util.concurrent.Executor; -import java.util.concurrent.ScheduledExecutorService; /** * 寮傛閰嶇疆 @@ -22,16 +20,12 @@ @AutoConfiguration public class AsyncConfig implements AsyncConfigurer { - @Autowired - @Qualifier("scheduledExecutorService") - private ScheduledExecutorService scheduledExecutorService; - /** * 鑷畾涔� @Async 娉ㄨВ浣跨敤绯荤粺绾跨▼姹� */ @Override public Executor getAsyncExecutor() { - return scheduledExecutorService; + return SpringUtils.getBean("scheduledExecutorService"); } /** diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ValidatorConfig.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ValidatorConfig.java index 00825c2..45c5bd1 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ValidatorConfig.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ValidatorConfig.java @@ -22,18 +22,19 @@ */ @Bean public Validator validator(MessageSource messageSource) { - LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean(); - // 鍥介檯鍖� - factoryBean.setValidationMessageSource(messageSource); - // 璁剧疆浣跨敤 HibernateValidator 鏍¢獙鍣� - factoryBean.setProviderClass(HibernateValidator.class); - Properties properties = new Properties(); - // 璁剧疆 蹇�熷紓甯歌繑鍥� - properties.setProperty("hibernate.validator.fail_fast", "true"); - factoryBean.setValidationProperties(properties); - // 鍔犺浇閰嶇疆 - factoryBean.afterPropertiesSet(); - return factoryBean.getValidator(); + try (LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean()) { + // 鍥介檯鍖� + factoryBean.setValidationMessageSource(messageSource); + // 璁剧疆浣跨敤 HibernateValidator 鏍¢獙鍣� + factoryBean.setProviderClass(HibernateValidator.class); + Properties properties = new Properties(); + // 璁剧疆 蹇�熷紓甯歌繑鍥� + properties.setProperty("hibernate.validator.fail_fast", "true"); + factoryBean.setValidationProperties(properties); + // 鍔犺浇閰嶇疆 + factoryBean.afterPropertiesSet(); + return factoryBean.getValidator(); + } } } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/factory/YmlPropertySourceFactory.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/factory/YmlPropertySourceFactory.java new file mode 100644 index 0000000..af61b90 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/factory/YmlPropertySourceFactory.java @@ -0,0 +1,31 @@ +package org.dromara.common.core.factory; + +import org.dromara.common.core.utils.StringUtils; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.core.env.PropertySource; +import org.springframework.core.io.support.DefaultPropertySourceFactory; +import org.springframework.core.io.support.EncodedResource; + +import java.io.IOException; + +/** + * yml 閰嶇疆婧愬伐鍘� + * + * @author Lion Li + */ +public class YmlPropertySourceFactory extends DefaultPropertySourceFactory { + + @Override + public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException { + String sourceName = resource.getResource().getFilename(); + if (StringUtils.isNotBlank(sourceName) && StringUtils.endsWithAny(sourceName, ".yml", ".yaml")) { + YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); + factory.setResources(resource.getResource()); + factory.afterPropertiesSet(); + return new PropertiesPropertySource(sourceName, factory.getObject()); + } + return super.createPropertySource(name, resource); + } + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/MessageUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/MessageUtils.java index 6f3729b..48dfc08 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/MessageUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/MessageUtils.java @@ -3,6 +3,7 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.springframework.context.MessageSource; +import org.springframework.context.NoSuchMessageException; import org.springframework.context.i18n.LocaleContextHolder; /** @@ -23,6 +24,10 @@ * @return 鑾峰彇鍥介檯鍖栫炕璇戝�� */ public static String message(String code, Object... args) { - return MESSAGE_SOURCE.getMessage(code, args, LocaleContextHolder.getLocale()); + try { + return MESSAGE_SOURCE.getMessage(code, args, LocaleContextHolder.getLocale()); + } catch (NoSuchMessageException e) { + return code; + } } } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ServletUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ServletUtils.java index 91e2990..a1316eb 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ServletUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ServletUtils.java @@ -10,6 +10,7 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.springframework.http.MediaType; +import org.springframework.util.LinkedCaseInsensitiveMap; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -19,6 +20,7 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Collections; +import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -101,14 +103,22 @@ * 鑾峰彇request */ public static HttpServletRequest getRequest() { - return getRequestAttributes().getRequest(); + try { + return getRequestAttributes().getRequest(); + } catch (Exception e) { + return null; + } } /** * 鑾峰彇response */ public static HttpServletResponse getResponse() { - return getRequestAttributes().getResponse(); + try { + return getRequestAttributes().getResponse(); + } catch (Exception e) { + return null; + } } /** @@ -119,8 +129,33 @@ } public static ServletRequestAttributes getRequestAttributes() { - RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); - return (ServletRequestAttributes) attributes; + try { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } catch (Exception e) { + return null; + } + } + + public static String getHeader(HttpServletRequest request, String name) { + String value = request.getHeader(name); + if (StringUtils.isEmpty(value)) { + return StringUtils.EMPTY; + } + return urlDecode(value); + } + + public static Map<String, String> getHeaders(HttpServletRequest request) { + Map<String, String> map = new LinkedCaseInsensitiveMap<>(); + Enumeration<String> enumeration = request.getHeaderNames(); + if (enumeration != null) { + while (enumeration.hasMoreElements()) { + String key = enumeration.nextElement(); + String value = request.getHeader(key); + map.put(key, value); + } + } + return map; } /** diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/SwaggerConfig.java b/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/SpringDocConfig.java similarity index 92% rename from ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/SwaggerConfig.java rename to ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/SpringDocConfig.java index 459941c..4e32380 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/SwaggerConfig.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/SpringDocConfig.java @@ -1,13 +1,13 @@ package org.dromara.common.doc.config; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.doc.config.properties.SwaggerProperties; -import org.dromara.common.doc.handler.OpenApiHandler; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Paths; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.doc.config.properties.SpringDocProperties; +import org.dromara.common.doc.handler.OpenApiHandler; import org.springdoc.core.configuration.SpringDocConfiguration; import org.springdoc.core.customizers.OpenApiBuilderCustomizer; import org.springdoc.core.customizers.OpenApiCustomizer; @@ -36,18 +36,18 @@ */ @RequiredArgsConstructor @AutoConfiguration(before = SpringDocConfiguration.class) -@EnableConfigurationProperties(SwaggerProperties.class) +@EnableConfigurationProperties(SpringDocProperties.class) @ConditionalOnProperty(name = "springdoc.api-docs.enabled", havingValue = "true", matchIfMissing = true) -public class SwaggerConfig { +public class SpringDocConfig { private final ServerProperties serverProperties; @Bean @ConditionalOnMissingBean(OpenAPI.class) - public OpenAPI openApi(SwaggerProperties swaggerProperties) { + public OpenAPI openApi(SpringDocProperties swaggerProperties) { OpenAPI openApi = new OpenAPI(); // 鏂囨。鍩烘湰淇℃伅 - SwaggerProperties.InfoProperties infoProperties = swaggerProperties.getInfo(); + SpringDocProperties.InfoProperties infoProperties = swaggerProperties.getInfo(); Info info = convertInfo(infoProperties); openApi.info(info); // 鎵╁睍鏂囨。淇℃伅 @@ -65,7 +65,7 @@ return openApi; } - private Info convertInfo(SwaggerProperties.InfoProperties infoProperties) { + private Info convertInfo(SpringDocProperties.InfoProperties infoProperties) { Info info = new Info(); info.setTitle(infoProperties.getTitle()); info.setDescription(infoProperties.getDescription()); diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/properties/SwaggerProperties.java b/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/properties/SpringDocProperties.java similarity index 95% rename from ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/properties/SwaggerProperties.java rename to ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/properties/SpringDocProperties.java index 9e08e73..eae3b4c 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/properties/SwaggerProperties.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/config/properties/SpringDocProperties.java @@ -18,8 +18,8 @@ * @author Lion Li */ @Data -@ConfigurationProperties(prefix = "swagger") -public class SwaggerProperties { +@ConfigurationProperties(prefix = "springdoc") +public class SpringDocProperties { /** * 鏂囨。鍩烘湰淇℃伅 diff --git a/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e64b2eb..fe11e76 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -org.dromara.common.doc.config.SwaggerConfig +org.dromara.common.doc.config.SpringDocConfig diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java index 1fe7834..c07a2bb 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java @@ -7,11 +7,13 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.dromara.common.core.factory.YmlPropertySourceFactory; import org.dromara.common.mybatis.handler.InjectionMetaObjectHandler; import org.dromara.common.mybatis.interceptor.PlusDataPermissionInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; import org.springframework.transaction.annotation.EnableTransactionManagement; /** @@ -22,6 +24,7 @@ @EnableTransactionManagement(proxyTargetClass = true) @AutoConfiguration @MapperScan("${mybatis-plus.mapperPackage}") +@PropertySource(value = "classpath:common-mybatis.yml", factory = YmlPropertySourceFactory.class) public class MybatisPlusConfig { @Bean diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/resources/common-mybatis.yml b/ruoyi-common/ruoyi-common-mybatis/src/main/resources/common-mybatis.yml new file mode 100644 index 0000000..f5dc637 --- /dev/null +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/resources/common-mybatis.yml @@ -0,0 +1,33 @@ +# 鍐呯疆閰嶇疆 涓嶅厑璁镐慨鏀� 濡傞渶淇敼璇峰湪 nacos 涓婂啓鐩稿悓閰嶇疆瑕嗙洊 +# MyBatisPlus閰嶇疆 +# https://baomidou.com/config/ +mybatis-plus: + # 鍚姩鏃舵槸鍚︽鏌� MyBatis XML 鏂囦欢鐨勫瓨鍦紝榛樿涓嶆鏌� + checkConfigLocation: false + configuration: + # 鑷姩椹煎嘲鍛藉悕瑙勫垯锛坈amel case锛夋槧灏� + mapUnderscoreToCamelCase: true + # MyBatis 鑷姩鏄犲皠绛栫暐 + # NONE锛氫笉鍚敤 PARTIAL锛氬彧瀵归潪宓屽 resultMap 鑷姩鏄犲皠 FULL锛氬鎵�鏈� resultMap 鑷姩鏄犲皠 + autoMappingBehavior: FULL + # MyBatis 鑷姩鏄犲皠鏃舵湭鐭ュ垪鎴栨湭鐭ュ睘鎬у鐞嗙瓥 + # NONE锛氫笉鍋氬鐞� WARNING锛氭墦鍗扮浉鍏宠鍛� FAILING锛氭姏鍑哄紓甯稿拰璇︾粏淇℃伅 + autoMappingUnknownColumnBehavior: NONE + # 鏇磋缁嗙殑鏃ュ織杈撳嚭 浼氭湁鎬ц兘鎹熻�� org.apache.ibatis.logging.stdout.StdOutImpl + # 鍏抽棴鏃ュ織璁板綍 (鍙崟绾娇鐢� p6spy 鍒嗘瀽) org.apache.ibatis.logging.nologging.NoLoggingImpl + # 榛樿鏃ュ織杈撳嚭 org.apache.ibatis.logging.slf4j.Slf4jImpl + logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl + global-config: + # 鏄惁鎵撳嵃 Logo banner + banner: true + dbConfig: + # 涓婚敭绫诲瀷 + # AUTO 鑷 NONE 绌� INPUT 鐢ㄦ埛杈撳叆 ASSIGN_ID 闆姳 ASSIGN_UUID 鍞竴 UUID + idType: ASSIGN_ID + # 閫昏緫宸插垹闄ゅ��(妗嗘灦琛ㄥ潎浣跨敤姝ゅ�� 绂佹闅忔剰淇敼) + logicDeleteValue: 2 + # 閫昏緫鏈垹闄ゅ�� + logicNotDeleteValue: 0 + insertStrategy: NOT_NULL + updateStrategy: NOT_NULL + whereStrategy: NOT_NULL diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java index 54ae2da..aef8a66 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java @@ -4,10 +4,12 @@ import cn.dev33.satoken.jwt.StpLogicJwtForSimple; import cn.dev33.satoken.stp.StpInterface; import cn.dev33.satoken.stp.StpLogic; +import org.dromara.common.core.factory.YmlPropertySourceFactory; import org.dromara.common.satoken.core.dao.PlusSaTokenDao; import org.dromara.common.satoken.core.service.SaPermissionImpl; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** @@ -16,6 +18,7 @@ * @author Lion Li */ @AutoConfiguration +@PropertySource(value = "classpath:common-satoken.yml", factory = YmlPropertySourceFactory.class) public class SaTokenConfig implements WebMvcConfigurer { @Bean diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml b/ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml new file mode 100644 index 0000000..c631641 --- /dev/null +++ b/ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml @@ -0,0 +1,11 @@ +# 鍐呯疆閰嶇疆 涓嶅厑璁镐慨鏀� 濡傞渶淇敼璇峰湪 nacos 涓婂啓鐩稿悓閰嶇疆瑕嗙洊 +# Sa-Token閰嶇疆 +sa-token: + # 鍏佽浠� 璇锋眰鍙傛暟 璇诲彇 token + is-read-body: true + # 鍏佽浠� header 璇诲彇 token + is-read-header: true + # 鍏抽棴 cookie 閴存潈 浠庢牴婧愭潨缁� csrf 婕忔礊椋庨櫓 + is-read-cookie: false + # token鍓嶇紑 + token-prefix: "Bearer" diff --git a/ruoyi-common/ruoyi-common-sms/pom.xml b/ruoyi-common/ruoyi-common-sms/pom.xml index b06c5ca..c50f222 100644 --- a/ruoyi-common/ruoyi-common-sms/pom.xml +++ b/ruoyi-common/ruoyi-common-sms/pom.xml @@ -16,22 +16,19 @@ </description> <dependencies> - <dependency> - <groupId>org.dromara</groupId> - <artifactId>ruoyi-common-json</artifactId> - </dependency> <dependency> - <groupId>com.aliyun</groupId> - <artifactId>dysmsapi20170525</artifactId> - <optional>true</optional> + <groupId>org.dromara.sms4j</groupId> + <artifactId>sms4j-spring-boot-starter</artifactId> + <exclusions> + <!-- 鎺掗櫎浜笢鐭俊鍐呭瓨鍦ㄧ殑fastjson绛夊緟浣滆�呭悗缁慨澶� --> + <exclusion> + <groupId>com.alibaba</groupId> + <artifactId>fastjson</artifactId> + </exclusion> + </exclusions> </dependency> - <dependency> - <groupId>com.tencentcloudapi</groupId> - <artifactId>tencentcloud-sdk-java-sms</artifactId> - <optional>true</optional> - </dependency> </dependencies> </project> diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsConfig.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsConfig.java index 86881f1..6b5a844 100644 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsConfig.java +++ b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsConfig.java @@ -1,15 +1,6 @@ package org.dromara.common.sms.config; -import org.dromara.common.sms.config.properties.SmsProperties; -import org.dromara.common.sms.core.AliyunSmsTemplate; -import org.dromara.common.sms.core.SmsTemplate; -import org.dromara.common.sms.core.TencentSmsTemplate; import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; /** * 鐭俊閰嶇疆绫� @@ -18,31 +9,7 @@ * @version 4.2.0 */ @AutoConfiguration -@EnableConfigurationProperties(SmsProperties.class) +//@EnableConfigurationProperties(SmsProperties.class) public class SmsConfig { - - @Configuration - @ConditionalOnProperty(value = "sms.enabled", havingValue = "true") - @ConditionalOnClass(com.aliyun.dysmsapi20170525.Client.class) - static class AliyunSmsConfig { - - @Bean - public SmsTemplate aliyunSmsTemplate(SmsProperties smsProperties) { - return new AliyunSmsTemplate(smsProperties); - } - - } - - @Configuration - @ConditionalOnProperty(value = "sms.enabled", havingValue = "true") - @ConditionalOnClass(com.tencentcloudapi.sms.v20190711.SmsClient.class) - static class TencentSmsConfig { - - @Bean - public SmsTemplate tencentSmsTemplate(SmsProperties smsProperties) { - return new TencentSmsTemplate(smsProperties); - } - - } } diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/properties/SmsProperties.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/properties/SmsProperties.java index da6d940..c7b3ef1 100644 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/properties/SmsProperties.java +++ b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/properties/SmsProperties.java @@ -1,45 +1,19 @@ -package org.dromara.common.sms.config.properties; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * SMS鐭俊 閰嶇疆灞炴�� - * - * @author Lion Li - * @version 4.2.0 - */ -@Data -@ConfigurationProperties(prefix = "sms") -public class SmsProperties { - - private Boolean enabled; - - /** - * 閰嶇疆鑺傜偣 - * 闃块噷浜� dysmsapi.aliyuncs.com - * 鑵捐浜� sms.tencentcloudapi.com - */ - private String endpoint; - - /** - * key - */ - private String accessKeyId; - - /** - * 瀵嗗寵 - */ - private String accessKeySecret; - - /* - * 鐭俊绛惧悕 - */ - private String signName; - - /** - * 鐭俊搴旂敤ID (鑵捐涓撳睘) - */ - private String sdkAppId; - -} +//package org.dromara.common.sms.config.properties; +// +//import lombok.Data; +//import org.springframework.boot.context.properties.ConfigurationProperties; +// +///** +// * SMS鐭俊 閰嶇疆灞炴�� +// * +// * @author Lion Li +// * @version 4.2.0 +// */ +//@Data +//@ConfigurationProperties(prefix = "sms") +//public class SmsProperties { +// +// private Boolean enabled; +// +// +//} diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/AliyunSmsTemplate.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/AliyunSmsTemplate.java deleted file mode 100644 index 00d8152..0000000 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/AliyunSmsTemplate.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.dromara.common.sms.core; - -import com.aliyun.dysmsapi20170525.Client; -import com.aliyun.dysmsapi20170525.models.SendSmsRequest; -import com.aliyun.dysmsapi20170525.models.SendSmsResponse; -import com.aliyun.teaopenapi.models.Config; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.json.utils.JsonUtils; -import org.dromara.common.sms.config.properties.SmsProperties; -import org.dromara.common.sms.entity.SmsResult; -import org.dromara.common.sms.exception.SmsException; -import lombok.SneakyThrows; - -import java.util.Map; - -/** - * Aliyun 鐭俊妯℃澘 - * - * @author Lion Li - * @version 4.2.0 - */ -public class AliyunSmsTemplate implements SmsTemplate { - - private SmsProperties properties; - - private Client client; - - @SneakyThrows(Exception.class) - public AliyunSmsTemplate(SmsProperties smsProperties) { - this.properties = smsProperties; - Config config = new Config() - // 鎮ㄧ殑AccessKey ID - .setAccessKeyId(smsProperties.getAccessKeyId()) - // 鎮ㄧ殑AccessKey Secret - .setAccessKeySecret(smsProperties.getAccessKeySecret()) - // 璁块棶鐨勫煙鍚� - .setEndpoint(smsProperties.getEndpoint()); - this.client = new Client(config); - } - - @Override - public SmsResult send(String phones, String templateId, Map<String, String> param) { - if (StringUtils.isBlank(phones)) { - throw new SmsException("鎵嬫満鍙蜂笉鑳戒负绌�"); - } - if (StringUtils.isBlank(templateId)) { - throw new SmsException("妯℃澘ID涓嶈兘涓虹┖"); - } - SendSmsRequest req = new SendSmsRequest() - .setPhoneNumbers(phones) - .setSignName(properties.getSignName()) - .setTemplateCode(templateId) - .setTemplateParam(JsonUtils.toJsonString(param)); - try { - SendSmsResponse resp = client.sendSms(req); - return SmsResult.builder() - .isSuccess("OK".equals(resp.getBody().getCode())) - .message(resp.getBody().getMessage()) - .response(JsonUtils.toJsonString(resp)) - .build(); - } catch (Exception e) { - throw new SmsException(e.getMessage()); - } - } - -} diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/SmsTemplate.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/SmsTemplate.java deleted file mode 100644 index eba38df..0000000 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/SmsTemplate.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.dromara.common.sms.core; - -import org.dromara.common.sms.entity.SmsResult; - -import java.util.Map; - -/** - * 鐭俊妯℃澘 - * - * @author Lion Li - * @version 4.2.0 - */ -public interface SmsTemplate { - - /** - * 鍙戦�佺煭淇� - * - * @param phones 鐢佃瘽鍙�(澶氫釜閫楀彿鍒嗗壊) - * @param templateId 妯℃澘id - * @param param 妯℃澘瀵瑰簲鍙傛暟 - * 闃块噷 闇�浣跨敤 妯℃澘鍙橀噺鍚嶇О瀵瑰簲鍐呭 渚嬪: code=1234 - * 鑵捐 闇�浣跨敤 妯℃澘鍙橀噺椤哄簭瀵瑰簲鍐呭 渚嬪: 1=1234, 1涓烘ā鏉垮唴绗竴涓弬鏁� - */ - SmsResult send(String phones, String templateId, Map<String, String> param); - -} diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/TencentSmsTemplate.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/TencentSmsTemplate.java deleted file mode 100644 index 18d7384..0000000 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/TencentSmsTemplate.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.dromara.common.sms.core; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ArrayUtil; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.json.utils.JsonUtils; -import org.dromara.common.sms.config.properties.SmsProperties; -import org.dromara.common.sms.entity.SmsResult; -import org.dromara.common.sms.exception.SmsException; -import com.tencentcloudapi.common.Credential; -import com.tencentcloudapi.common.profile.ClientProfile; -import com.tencentcloudapi.common.profile.HttpProfile; -import com.tencentcloudapi.sms.v20190711.SmsClient; -import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest; -import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse; -import com.tencentcloudapi.sms.v20190711.models.SendStatus; -import lombok.SneakyThrows; - -import java.util.Arrays; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Tencent 鐭俊妯℃澘 - * - * @author Lion Li - * @version 4.2.0 - */ -public class TencentSmsTemplate implements SmsTemplate { - - private SmsProperties properties; - - private SmsClient client; - - @SneakyThrows(Exception.class) - public TencentSmsTemplate(SmsProperties smsProperties) { - this.properties = smsProperties; - Credential credential = new Credential(smsProperties.getAccessKeyId(), smsProperties.getAccessKeySecret()); - HttpProfile httpProfile = new HttpProfile(); - httpProfile.setEndpoint(smsProperties.getEndpoint()); - ClientProfile clientProfile = new ClientProfile(); - clientProfile.setHttpProfile(httpProfile); - this.client = new SmsClient(credential, "", clientProfile); - } - - @Override - public SmsResult send(String phones, String templateId, Map<String, String> param) { - if (StringUtils.isBlank(phones)) { - throw new SmsException("鎵嬫満鍙蜂笉鑳戒负绌�"); - } - if (StringUtils.isBlank(templateId)) { - throw new SmsException("妯℃澘ID涓嶈兘涓虹┖"); - } - SendSmsRequest req = new SendSmsRequest(); - Set<String> set = Arrays.stream(phones.split(StringUtils.SEPARATOR)).map(p -> "+86" + p).collect(Collectors.toSet()); - req.setPhoneNumberSet(ArrayUtil.toArray(set, String.class)); - if (CollUtil.isNotEmpty(param)) { - req.setTemplateParamSet(ArrayUtil.toArray(param.values(), String.class)); - } - req.setTemplateID(templateId); - req.setSign(properties.getSignName()); - req.setSmsSdkAppid(properties.getSdkAppId()); - try { - SendSmsResponse resp = client.SendSms(req); - SmsResult.SmsResultBuilder builder = SmsResult.builder() - .isSuccess(true) - .message("send success") - .response(JsonUtils.toJsonString(resp)); - for (SendStatus sendStatus : resp.getSendStatusSet()) { - if (!"Ok".equals(sendStatus.getCode())) { - builder.isSuccess(false).message(sendStatus.getMessage()); - break; - } - } - return builder.build(); - } catch (Exception e) { - throw new SmsException(e.getMessage()); - } - } - -} diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/entity/SmsResult.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/entity/SmsResult.java deleted file mode 100644 index 232d612..0000000 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/entity/SmsResult.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.common.sms.entity; - -import lombok.Builder; -import lombok.Data; - -/** - * 涓婁紶杩斿洖浣� - * - * @author Lion Li - */ -@Data -@Builder -public class SmsResult { - - /** - * 鏄惁鎴愬姛 - */ - private boolean isSuccess; - - /** - * 鍝嶅簲娑堟伅 - */ - private String message; - - /** - * 瀹為檯鍝嶅簲浣� - * <p> - * 鍙嚜琛岃浆鎹负 SDK 瀵瑰簲鐨� SendSmsResponse - */ - private String response; -} diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/exception/SmsException.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/exception/SmsException.java deleted file mode 100644 index eb7730a..0000000 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/exception/SmsException.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.dromara.common.sms.exception; - -import java.io.Serial; - -/** - * Sms寮傚父绫� - * - * @author Lion Li - */ -public class SmsException extends RuntimeException { - - @Serial - private static final long serialVersionUID = 1L; - - public SmsException(String msg) { - super(msg); - } - -} diff --git a/ruoyi-modules/ruoyi-demo/pom.xml b/ruoyi-modules/ruoyi-demo/pom.xml index 09bf0bf..4fd43bc 100644 --- a/ruoyi-modules/ruoyi-demo/pom.xml +++ b/ruoyi-modules/ruoyi-demo/pom.xml @@ -97,16 +97,6 @@ <groupId>org.dromara</groupId> <artifactId>ruoyi-common-websocket</artifactId> </dependency> - <!-- 鐭俊 鐢ㄥ摢涓鍏ュ摢涓緷璧� --> -<!-- <dependency>--> -<!-- <groupId>com.aliyun</groupId>--> -<!-- <artifactId>dysmsapi20170525</artifactId>--> -<!-- </dependency>--> - -<!-- <dependency>--> -<!-- <groupId>com.tencentcloudapi</groupId>--> -<!-- <artifactId>tencentcloud-sdk-java-sms</artifactId>--> -<!-- </dependency>--> </dependencies> diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java index e130cae..fb19731 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java @@ -1,17 +1,17 @@ package org.dromara.demo.controller; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.utils.SpringUtils; -import org.dromara.common.sms.config.properties.SmsProperties; -import org.dromara.common.sms.core.SmsTemplate; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; +import org.dromara.sms4j.provider.enumerate.SupplierType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.HashMap; -import java.util.Map; +import java.util.LinkedHashMap; /** * 鐭俊婕旂ず妗堜緥 @@ -26,10 +26,6 @@ @RequestMapping("/demo/sms") public class SmsController { - private final SmsProperties smsProperties; -// private final SmsTemplate smsTemplate; // 鍙互浣跨敤spring娉ㄥ叆 -// private final AliyunSmsTemplate smsTemplate; // 涔熷彲浠ユ敞鍏ユ煇涓巶瀹剁殑妯℃澘宸ュ叿 - /** * 鍙戦�佺煭淇liyun * @@ -38,17 +34,11 @@ */ @GetMapping("/sendAliyun") public R<Object> sendAliyun(String phones, String templateId) { - if (!smsProperties.getEnabled()) { - return R.fail("褰撳墠绯荤粺娌℃湁寮�鍚煭淇″姛鑳斤紒"); - } - if (!SpringUtils.containsBean("aliyunSmsTemplate")) { - return R.fail("闃块噷浜戜緷璧栨湭寮曞叆锛�"); - } - SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class); - Map<String, String> map = new HashMap<>(1); + LinkedHashMap<String, String> map = new LinkedHashMap<>(1); map.put("code", "1234"); - Object send = smsTemplate.send(phones, templateId, map); - return R.ok(send); + SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA); + SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); + return R.ok(smsResponse); } /** @@ -59,18 +49,12 @@ */ @GetMapping("/sendTencent") public R<Object> sendTencent(String phones, String templateId) { - if (!smsProperties.getEnabled()) { - return R.fail("褰撳墠绯荤粺娌℃湁寮�鍚煭淇″姛鑳斤紒"); - } - if (!SpringUtils.containsBean("tencentSmsTemplate")) { - return R.fail("鑵捐浜戜緷璧栨湭寮曞叆锛�"); - } - SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class); - Map<String, String> map = new HashMap<>(1); + LinkedHashMap<String, String> map = new LinkedHashMap<>(1); // map.put("2", "娴嬭瘯娴嬭瘯"); map.put("1", "1234"); - Object send = smsTemplate.send(phones, templateId, map); - return R.ok(send); + SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.TENCENT); + SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); + return R.ok(smsResponse); } } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java index 2d8b886..f38d39c 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java @@ -2,6 +2,7 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.generator.domain.GenTableColumn; @@ -22,6 +23,6 @@ * @return 鍒椾俊鎭� */ @DS("#dataName") - List<GenTableColumn> selectDbTableColumnsByName(String tableName, String dataName); + List<GenTableColumn> selectDbTableColumnsByName(@Param("tableName") String tableName, String dataName); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java index dc8fbc0..865b57a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckRole; import com.baomidou.lock.annotation.Lock4j; import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -174,7 +175,8 @@ @SaCheckPermission("system:tenant:edit") @Log(title = "绉熸埛", businessType = BusinessType.UPDATE) @GetMapping("/syncTenantPackage") - public R<Void> syncTenantPackage(@NotBlank(message = "绉熸埛ID涓嶈兘涓虹┖") String tenantId, @NotBlank(message = "濂楅ID涓嶈兘涓虹┖") Long packageId) { + public R<Void> syncTenantPackage(@NotBlank(message = "绉熸埛ID涓嶈兘涓虹┖") String tenantId, + @NotNull(message = "濂楅ID涓嶈兘涓虹┖") Long packageId) { return toAjax(TenantHelper.ignore(() -> tenantService.syncTenantPackage(tenantId, packageId))); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java index 81bd1ff..c3a8869 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java @@ -94,7 +94,7 @@ * @return 鐢ㄦ埛瀵硅薄淇℃伅 */ @InterceptorIgnore(tenantLine = "true") - SysUserVo selectTenantUserByUserName(String userName, String tenantId); + SysUserVo selectTenantUserByUserName(@Param("userName") String userName, @Param("tenantId") String tenantId); /** * 閫氳繃鎵嬫満鍙锋煡璇㈢敤鎴�(涓嶈蛋绉熸埛鎻掍欢) @@ -104,7 +104,7 @@ * @return 鐢ㄦ埛瀵硅薄淇℃伅 */ @InterceptorIgnore(tenantLine = "true") - SysUserVo selectTenantUserByPhonenumber(String phonenumber, String tenantId); + SysUserVo selectTenantUserByPhonenumber(@Param("phonenumber") String phonenumber, @Param("tenantId") String tenantId); /** * 閫氳繃閭鏌ヨ鐢ㄦ埛(涓嶈蛋绉熸埛鎻掍欢) @@ -114,7 +114,8 @@ * @return 鐢ㄦ埛瀵硅薄淇℃伅 */ @InterceptorIgnore(tenantLine = "true") - SysUserVo selectTenantUserByEmail(String email, String tenantId); + SysUserVo selectTenantUserByEmail(@Param("email") String email, @Param("tenantId") String tenantId); + /** * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java index 1302118..1202c33 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java @@ -22,7 +22,7 @@ @Override public boolean isSensitive() { if (TenantHelper.isEnable()) { - return !LoginHelper.isSuperAdmin() || !LoginHelper.isTenantAdmin(); + return !LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin(); } return !LoginHelper.isSuperAdmin(); } -- Gitblit v1.9.3