diff --git a/src/main/java/org/dromara/common/core/domain/model/SmsLoginBody.java b/src/main/java/org/dromara/common/core/domain/model/SmsLoginBody.java deleted file mode 100644 index a878348..0000000 --- a/src/main/java/org/dromara/common/core/domain/model/SmsLoginBody.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.dromara.common.core.domain.model; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 短信登录对象 - * - * @author Lion Li - */ - -@Data -@EqualsAndHashCode(callSuper = true) -public class SmsLoginBody extends LoginBody { - - /** - * 手机号 - */ - @NotBlank(message = "{user.phonenumber.not.blank}") - private String phonenumber; - - /** - * 短信code - */ - @NotBlank(message = "{sms.code.not.blank}") - private String smsCode; - -} diff --git a/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java b/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java deleted file mode 100644 index 5f179e1..0000000 --- a/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.common.sms.config; - -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.context.annotation.Configuration; - -/** - * 短信配置类(暂时没用 预留扩展) - * - * @author Lion Li - * @version 4.2.0 - */ -@Configuration -public class SmsAutoConfiguration { - -} diff --git a/src/main/java/org/dromara/demo/controller/SmsController.java b/src/main/java/org/dromara/demo/controller/SmsController.java deleted file mode 100644 index fb19731..0000000 --- a/src/main/java/org/dromara/demo/controller/SmsController.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.dromara.demo.controller; - -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.LinkedHashMap; - -/** - * 短信演示案例 - * 请先阅读文档 否则无法使用 - * - * @author Lion Li - * @version 4.2.0 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/sms") -public class SmsController { - - /** - * 发送短信Aliyun - * - * @param phones 电话号 - * @param templateId 模板ID - */ - @GetMapping("/sendAliyun") - public R sendAliyun(String phones, String templateId) { - LinkedHashMap map = new LinkedHashMap<>(1); - map.put("code", "1234"); - SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA); - SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); - return R.ok(smsResponse); - } - - /** - * 发送短信Tencent - * - * @param phones 电话号 - * @param templateId 模板ID - */ - @GetMapping("/sendTencent") - public R sendTencent(String phones, String templateId) { - LinkedHashMap map = new LinkedHashMap<>(1); -// map.put("2", "测试测试"); - map.put("1", "1234"); - SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.TENCENT); - SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); - return R.ok(smsResponse); - } - -} diff --git a/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java b/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java deleted file mode 100644 index eb38abf..0000000 --- a/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.dromara.web.service.impl; - -import cn.dev33.satoken.stp.SaLoginModel; -import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.constant.Constants; -import org.dromara.common.core.constant.GlobalConstants; -import org.dromara.common.core.domain.model.LoginUser; -import org.dromara.common.core.domain.model.SmsLoginBody; -import org.dromara.common.core.enums.LoginType; -import org.dromara.common.core.enums.UserStatus; -import org.dromara.common.core.exception.user.CaptchaExpireException; -import org.dromara.common.core.exception.user.UserException; -import org.dromara.common.core.utils.MessageUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.core.utils.ValidatorUtils; -import org.dromara.common.json.utils.JsonUtils; -import org.dromara.common.redis.utils.RedisUtils; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.system.domain.SysClient; -import org.dromara.system.domain.SysUser; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.mapper.SysUserMapper; -import org.dromara.web.domain.vo.LoginVo; -import org.dromara.web.service.IAuthStrategy; -import org.dromara.web.service.SysLoginService; -import org.springframework.stereotype.Service; - -/** - * 短信认证策略 - * - * @author Michelle.Chung - */ -@Slf4j -@Service("sms" + IAuthStrategy.BASE_NAME) -@RequiredArgsConstructor -public class SmsAuthStrategy implements IAuthStrategy { - - private final SysLoginService loginService; - private final SysUserMapper userMapper; - - @Override - public LoginVo login(String body, SysClient client) { - SmsLoginBody loginBody = JsonUtils.parseObject(body, SmsLoginBody.class); - ValidatorUtils.validate(loginBody); - String tenantId = loginBody.getTenantId(); - String phonenumber = loginBody.getPhonenumber(); - String smsCode = loginBody.getSmsCode(); - - // 通过手机号查找用户 - SysUserVo user = loadUserByPhonenumber(tenantId, phonenumber); - - loginService.checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode)); - // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 - LoginUser loginUser = loginService.buildLoginUser(user); - loginUser.setClientKey(client.getClientKey()); - loginUser.setDeviceType(client.getDeviceType()); - SaLoginModel model = new SaLoginModel(); - model.setDevice(client.getDeviceType()); - // 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置 - // 例如: 后台用户30分钟过期 app用户1天过期 - model.setTimeout(client.getTimeout()); - model.setActiveTimeout(client.getActiveTimeout()); - model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId()); - // 生成token - LoginHelper.login(loginUser, model); - - LoginVo loginVo = new LoginVo(); - loginVo.setAccessToken(StpUtil.getTokenValue()); - loginVo.setExpireIn(StpUtil.getTokenTimeout()); - loginVo.setClientId(client.getClientId()); - return loginVo; - } - - /** - * 校验短信验证码 - */ - private boolean validateSmsCode(String tenantId, String phonenumber, String smsCode) { - String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + phonenumber); - if (StringUtils.isBlank(code)) { - loginService.recordLogininfor(tenantId, phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); - throw new CaptchaExpireException(); - } - return code.equals(smsCode); - } - - private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) { - SysUser user = userMapper.selectOne(new LambdaQueryWrapper() - .select(SysUser::getPhonenumber, SysUser::getStatus) - .eq(SysUser::getPhonenumber, phonenumber)); - if (ObjectUtil.isNull(user)) { - log.info("登录用户:{} 不存在.", phonenumber); - throw new UserException("user.not.exists", phonenumber); - } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { - log.info("登录用户:{} 已被停用.", phonenumber); - throw new UserException("user.blocked", phonenumber); - } - return userMapper.selectUserByPhonenumber(phonenumber); - } - -}