diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/SysSmsExceptionEnum.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/SysSmsExceptionEnum.java new file mode 100644 index 000000000..0e0c73751 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/SysSmsExceptionEnum.java @@ -0,0 +1,66 @@ +/* +Copyright [2020] [https://www.stylefeng.cn] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + +1.请不要删除和修改根目录下的LICENSE文件。 +2.请不要删除和修改Guns源码头部的版权声明。 +3.请保留源码和相关描述文件的项目出处,作者声明等。 +4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns-separation +5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns-separation +6.若您的项目无法满足以上几点,可申请商业授权,获取Guns商业授权许可,请在官网购买授权,地址为 https://www.stylefeng.cn + */ +package cn.stylefeng.roses.kernel.system.exception.enums; + +import cn.stylefeng.roses.kernel.rule.abstracts.AbstractExceptionEnum; +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; +import cn.stylefeng.roses.kernel.system.constants.SystemConstants; +import lombok.Getter; + +/** + * 系统角色相关异常枚举 + * + * @author majianguo + * @date 2020/11/5 上午11:06 + */ +@Getter +public enum SysSmsExceptionEnum implements AbstractExceptionEnum { + + /** + * 验证码不能为空 + */ + KAPTCHA_EMPTY(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "101", "验证码不能为空"), + + /** + * 图形验证码错误 + */ + KAPTCHA_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "102", "验证码错误"); + + /** + * 错误编码 + */ + private final String errorCode; + + /** + * 提示用户信息 + */ + private final String userTip; + + SysSmsExceptionEnum(String errorCode, String userTip) { + this.errorCode = errorCode; + this.userTip = userTip; + } + +} diff --git a/kernel-s-system/system-business-sms/pom.xml b/kernel-s-system/system-business-sms/pom.xml index 0eeaf894a..bb42c23fd 100644 --- a/kernel-s-system/system-business-sms/pom.xml +++ b/kernel-s-system/system-business-sms/pom.xml @@ -17,10 +17,10 @@ - + cn.stylefeng.roses - sms-api + system-api 1.0.0 @@ -32,6 +32,13 @@ 1.0.0 + + + cn.stylefeng.roses + sms-api + 1.0.0 + + diff --git a/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/controller/SmsSenderController.java b/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/controller/SmsSenderController.java index 093578fad..d5f02a20c 100644 --- a/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/controller/SmsSenderController.java +++ b/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/controller/SmsSenderController.java @@ -8,9 +8,9 @@ import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.sms.modular.param.SysSmsInfoParam; -import cn.stylefeng.roses.kernel.sms.modular.service.SysSmsInfoService; import cn.stylefeng.roses.kernel.sms.modular.param.SysSmsSendParam; import cn.stylefeng.roses.kernel.sms.modular.param.SysSmsVerifyParam; +import cn.stylefeng.roses.kernel.sms.modular.service.SysSmsInfoService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -48,8 +48,8 @@ public class SmsSenderController { * @author fengshuonan * @date 2020/10/26 18:34 */ - @PostResource(name = "发送验证码短信", path = "/sms/sendLoginMessage") - public ResponseData sendLoginMessage(@RequestBody @Validated SysSmsSendParam sysSmsSendParam) { + @PostResource(name = "发送验证码短信", path = "/sms/sendLoginMessage", requiredLogin = false, requiredPermission = false) + public ResponseData sendMessage(@RequestBody @Validated SysSmsSendParam sysSmsSendParam) { // 清空params参数 sysSmsSendParam.setParams(null); diff --git a/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/param/SysSmsSendParam.java b/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/param/SysSmsSendParam.java index b5f97ec95..d2b2d9d89 100644 --- a/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/param/SysSmsSendParam.java +++ b/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/param/SysSmsSendParam.java @@ -28,6 +28,16 @@ public class SysSmsSendParam { @NotBlank(message = "模板号为空,请检查templateCode参数") private String templateCode; + /** + * 图形验证码 + */ + private String verCode; + + /** + * 缓存 key + */ + private String verKey; + /** * 模板中的参数 */ diff --git a/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/service/impl/SysSmsInfoServiceImpl.java b/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/service/impl/SysSmsInfoServiceImpl.java index 8bce7ef38..8857beced 100644 --- a/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/service/impl/SysSmsInfoServiceImpl.java +++ b/kernel-s-system/system-business-sms/src/main/java/cn/stylefeng/roses/kernel/sms/modular/service/impl/SysSmsInfoServiceImpl.java @@ -3,6 +3,7 @@ package cn.stylefeng.roses.kernel.sms.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; @@ -17,6 +18,9 @@ import cn.stylefeng.roses.kernel.sms.modular.param.SysSmsInfoParam; import cn.stylefeng.roses.kernel.sms.modular.param.SysSmsSendParam; import cn.stylefeng.roses.kernel.sms.modular.param.SysSmsVerifyParam; import cn.stylefeng.roses.kernel.sms.modular.service.SysSmsInfoService; +import cn.stylefeng.roses.kernel.system.exception.SystemModularException; +import cn.stylefeng.roses.kernel.system.exception.enums.SysSmsExceptionEnum; +import cn.stylefeng.roses.kernel.validator.CaptchaApi; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -46,10 +50,21 @@ public class SysSmsInfoServiceImpl extends ServiceImpl imp @Resource private SmsSenderApi smsSenderApi; + @Resource + private CaptchaApi captchaApi; + @Transactional(rollbackFor = Exception.class) @Override public boolean sendShortMessage(SysSmsSendParam sysSmsSendParam) { - + String verCode = sysSmsSendParam.getVerCode(); + String verKey = sysSmsSendParam.getVerKey(); + if (StrUtil.isEmpty(verCode) || StrUtil.isEmpty(verKey)) { + throw new SystemModularException(SysSmsExceptionEnum.KAPTCHA_EMPTY); + } + if (!captchaApi.validate(verCode, verKey)) { + throw new SystemModularException(SysSmsExceptionEnum.KAPTCHA_ERROR); + } + Map params = sysSmsSendParam.getParams(); // 1. 如果是纯消息发送,直接发送,校验类短信要把验证码存库 diff --git a/kernel-s-system/system-spring-boot-starter/pom.xml b/kernel-s-system/system-spring-boot-starter/pom.xml index 867b5bc4d..c11df1f89 100644 --- a/kernel-s-system/system-spring-boot-starter/pom.xml +++ b/kernel-s-system/system-spring-boot-starter/pom.xml @@ -73,6 +73,12 @@ 1.0.0 + + + cn.stylefeng.roses + system-business-sms + 1.0.0 +