热乎的SSM整合阿里云发送短信

sms整合 阿里云发送短信校验短信

发送短信工具类

package com.huhu.smscenter.utils;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.huhu.smscenter.constant.SmsConstant;

import java.io.InputStream;
import java.util.Properties;

/**
 * 发送短信工具类
 *
 * @Package: PACKAGE_NAME
 * @ClassName: SmsUtil
 * @author: 7
 * @date: 2022/1/16 12:35
 */

public class SmsUtil {

    /**
     * 发送短信
     *
     * @param phoneNumbers 手机号
     * @param param        验证码
     * @throws ClientException
     */
    public static void sendShortMessage(String phoneNumbers, String param) throws Exception {

        // TODO: 2022/1/18 从配置文件读取 Smscenter配置
        Properties dbProps = new Properties();
        //使用类加载器取加载配置文件
        InputStream is = SmsUtil.class.getResourceAsStream(SmsConstant.classpath);
        dbProps.load(is);
        //获取配置
        String accesskeyid = dbProps.getProperty(SmsConstant.accessKeyId);
        String accessKeySecret = dbProps.getProperty(SmsConstant.accessKeySecret);
        String area = dbProps.getProperty(SmsConstant.area);
        String domain = dbProps.getProperty(SmsConstant.domain);
        String product = dbProps.getProperty(SmsConstant.product);
        //由于中文会乱码所以处理中文乱码
        String signame = dbProps.getProperty(SmsConstant.signName);
        //设置签名设置模板
        String templateCode = dbProps.getProperty(SmsConstant.templateCode);

        // 设置超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        // 初始化ascClient
        IClientProfile profile = DefaultProfile.getProfile(area, accesskeyid, accessKeySecret);
        DefaultProfile.addEndpoint(area, area, product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);
        // 组装请求对象
        SendSmsRequest request = new SendSmsRequest();
        // 使用post提交
        request.setMethod(MethodType.POST);
        request.setPhoneNumbers(phoneNumbers);
        // 短信签名
        request.setSignName(signame);
        // 短信模板
        request.setTemplateCode(templateCode);
        request.setTemplateParam("{\"code\":\"" + param + "\"}");

        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        if (sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) {
            // 请求成功
            System.out.println("发送成功!");
        } else {
            System.err.println("发送失败!" + sendSmsResponse.getMessage());
        }
    }

}

Controller层:

sms整合 阿里云发送短信校验短信

Controller层:
/**
 * @Package: com.huhu.login.controller
 * @ClassName: LoginController
 * @author: 7
 * @date: 2022/1/17 11:26
 */
@Slf4j
@Controller()
@RequestMapping("/smscenter")
public class SmsController {


    /**
     * 短信业务层
     */
    @Autowired
    private SmsService smsService;


    /**
     * 判断用户是否是第一次登录
     *
     * @param smsDto
     * @return
     */
    @RequestMapping("/isfirstlogin")
    @ResponseBody
    public ResponseEntity isFirstlogin(@RequestBody() SmsDto smsDto) {
                if (null == smsDto) {
            return (ResponseEntity) ResponseEntity.status(HttpStatus.HTTP_BAD_REQUEST);
        }
        return smsService.isfirst(smsDto);

    }

    /**
     * 发送验证码
     *
     * @param smsDto
     * @return
     */
    @RequestMapping("/sendVerificationCode")
    @ResponseBody
    public ResponseEntity sendVerificationCode(@RequestBody SmsDto smsDto) throws Exception {
        if (smsDto == null) {
            ResponseEntity.status(HttpStatus.HTTP_BAD_REQUEST);
        }
        return smsService.sendVerificationCode(smsDto);
    }


    /**
     * @param phone     手机号
     * @param checkCode 验证码
     * @return
     */
    @RequestMapping("/verificationCode")
    @ResponseBody
    public ResponseEntity verificationCode(@RequestParam("phone") String phone, @RequestParam("checkCode") String checkCode) {
        if (phone == null && checkCode == null) {
            ResponseEntity.status(HttpStatus.HTTP_BAD_REQUEST);
        }
        return smsService.verificationCode(phone, checkCode);
    }

}




Service接口层:



/**
 * @Package: com.huhu.login.service
 * @InterfaceName: SmsService
 * @author: 7
 * @date: 2022/1/17 14:59
 */

public interface SmsService {

    /**
     * 发送验证码
     *
     * @param smsDto
     * @return
     */
    ResponseEntity sendVerificationCode(SmsDto smsDto) throws Exception;


    /**
     * 是否是第一次登录
     *
     * @param smsDto
     * @return
     */
    ResponseEntity isfirst(SmsDto smsDto);


    /**
     * 校验验证码
     *
     * @param phone
     * @param checkCode
     * @return
     */
    ResponseEntity verificationCode(String phone, String checkCode);
}

Service接口层:


/**
* @Package: com.huhu.login.service
* @InterfaceName: SmsService
* @author: 7
* @date: 2022/1/17 14:59
*/

public interface SmsService {

/**
* 发送验证码
*
* @param smsDto
* @return
*/
ResponseEntity sendVerificationCode(SmsDto smsDto) throws Exception;


/**
* 是否是第一次登录
*
* @param smsDto
* @return
*/
ResponseEntity isfirst(SmsDto smsDto);


/**
* 校验验证码
*
* @param phone
* @param checkCode
* @return
*/
ResponseEntity verificationCode(String phone, String checkCode);
}

ServiceImpl 实现层

Serviceimpl业务层:

利用Session设置 短信验证码的过期时间



/**
* @Package: com.huhu.login.service.impl
* @ClassName: SmsServiceImpl
* @author: 7
* @date: 2022/1/17 15:01
*/


@SuppressWarnings("all")
@Service
public class SmsServiceImpl implements SmsService {

@Autowired
private SmsLoginDao smsloginDao;

private Map<String, String> map = new HashMap<>();


private Session session = null;


/**
* 是否是第一次登录
*
* @param smsDto
* @return
*/
@Override
public ResponseEntity isfirst(SmsDto smsDto) {
Integer result = smsloginDao.findBydeviceId(smsDto.getDeviceId(), smsDto.getLoginType());
//不是空的 直接登录
return result <= NumberEnum.ZERO.getValue() ? ResponseEntity.ok(HttpStatus.HTTP_ACCEPTED) : ResponseEntity.ok(HttpStatus.HTTP_OK);
}

/**
* 发送短息
*
* @param smsDto
* @return
* @throws Exception
*/
@Override
public ResponseEntity sendVerificationCode(SmsDto smsDto) throws Exception {
session = SecurityUtils.getSubject().getSession(true);
//判断手机号格式是否正确
if (!PhoneUtils.validatePhoneNumber(smsDto.getPhone())) {
return ResponseEntity.ok(HttpStatus.HTTP_BAD_REQUEST);
}
Device device = new Device();
String code = PhoneUtils.getRandomNum().toString();
//将验证码存入sessionv 设置超时间一分钟
session.setAttribute(smsDto.getPhone(), code);
session.setTimeout(60000);
//发送验证码
SmsUtil.sendShortMessage(smsDto.getPhone(), code);
//设备标识入库
String s = "";
s = s.valueOf(SnowFlakeUtils.getFlowIdInstance().nextId());
device.setId(s);
device.setDeviceId(smsDto.getDeviceId());
device.setLoginType(smsDto.getLoginType());
device.setLogon_Time(new Date());
Boolean result = smsloginDao.saveDeviceIdInfo(device);
return result ? ResponseEntity.ok(HttpStatus.HTTP_OK) : ResponseEntity.ok("设备信息保存失败!");
}

/**
* 校验验证码
*
* @param phone 手机号
* @param checkCode 验证码
* @return
*/
@Override
public ResponseEntity verificationCode(String phone, String checkCode) {
String code = (String) session.getAttribute(phone);
if (null == code || !code.equals(checkCode)) {
return ResponseEntity.ok("验证码错误或者 session中的验证码已失效!");
}
//校验完毕删除Session中的验证码
session.removeAttribute(phone);
return ResponseEntity.ok(HttpStatus.HTTP_OK);
}


}

Dao层 保存数据


/**
* @Package: com.huhu.login.dao
* @ClassName: SmsDao
* @author: 7
* @date: 2022/1/17 15:23
*/
@MyBatisDao
public interface SmsLoginDao extends CrudDao<Device> {

Integer findBydeviceId(@Param("deviceId") String deviceId, @Param("loginType") Integer loginType);

Boolean saveDeviceIdInfo(Device device);

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值