阿里云短信服务的使用(创建,测试笔记)

目录

注册账号

选择短信服务-国内消息

创建短信模板

 创建AccessKey

 添加AccessKey的使用权限

设置启用和禁用AccessKey​编辑

 代码开发


注册账号

阿里云官网: https://www.aliyun.com/

点击官网首页注册按钮。

阿里云短信服务-设置短信签名

选择短信服务-国内消息

注册成功后,点击登录按钮进行登录。登录后进入短信服务管理页面,选择国内消息菜单:

创建短信模板

短信模板包含短信发送内容、场景、变量信息。

 创建AccessKey

点击右上角,在弹出的窗口中点击【AccessKey管理】∶

 添加AccessKey的使用权限

设置启用和禁用AccessKey

 代码开发

1、导入maven坐标

<!--阿里云短信服务-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.1.0</version>
        </dependency>

2、调用API(此处将api封装成utils)

public class SMSUtils {

	/**
	 * 发送短信
	 * @param signName 签名
	 * @param templateCode 模板
	 * @param phoneNumbers 手机号
	 * @param param 参数
	 */
	public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
		DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tJPSzEXKgNYxUor1yjD", "MqeAq4ZW3p1xPN0FPhjgrT5GXCKEuq");
		IAcsClient client = new DefaultAcsClient(profile);

		SendSmsRequest request = new SendSmsRequest();
		request.setSysRegionId("cn-hangzhou");
		request.setPhoneNumbers(phoneNumbers); //手机号
		request.setSignName(signName); //签名
		request.setTemplateCode(templateCode); //模板code
		request.setTemplateParam("{\"code\":\""+param+"\"}");
		try {
			SendSmsResponse response = client.getAcsResponse(request);
			System.out.println("短信发送成功");
		}catch (ClientException e) {
			e.printStackTrace();
		}
	}

3、导入接受短信验证码的相关配置类

  • 实体类User(直接从课程资料中导入即可)
  • Mapper接口UserMapper
  • 业务层接口UserService
  • 业务层实现类UserServicelmpl
  • 控制层UserController
  • 工具类SMSutils、 ValidateCodeutils(直接从课程资料中导入即可)

-------需要访问手机端页面,不可被拦截,在LogincheckFilter过滤器中放行

   String[] urls = new String[]{
                "/employee/login",
                "/employee/logout",
                "/backend/**",
                "/front/**",
                "/common/**",
                "/user/login",
                "/user/sendMsg"
        };






        //4.1、判断登录状态,如果已登录,则直接放行
        if (request.getSession().getAttribute("employee")!=null){
            log.info("用户已登录,id为{}",request.getSession().getAttribute("employee"));
            //获取当前用户的id,set到线程中,以便controller方法和Handler中使用
            Long empId = (Long) request.getSession().getAttribute("employee");
            BaseContextUtil.setNowId(empId);

            filterChain.doFilter(request,response);
            return;
        }
        // 4-2、判断登录状态,如果已登录,则直接放行
        if (request.getSession().getAttribute("user") != null) {
            log.info("用户已登录,用户id为:{}", request.getSession().getAttribute("user"));

            Long userId= (Long) request.getSession().getAttribute("user");

            BaseContextUtil.setNowId(userId);

            filterChain.doFilter(request, response);
            return;
        }

-----UserController处理post请求(发送验证码的请求和登录请求)

此处模拟了验证码的发送,真实发送需要AccessKey,详情见IDEA中的配置

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/sendMsg")
        public R<String> sendMsg(@RequestBody User user, HttpSession httpSession ){
            //获取手机号
            String phone = user.getPhone();

            if(StringUtils.isNotEmpty(phone)){
                //生成随机的4位验证码
                String code = ValidateCodeUtils.generateValidateCode(4).toString();
                log.info("code={}",code);

                //调用阿里云提供的短信服务API完成发送短信
                //SMSUtils.sendMessage("瑞吉外卖","",phone,code);

                //需要将生成的验证码保存到Session
                httpSession.setAttribute(phone,code);

                return R.success("手机验证码短信发送成功");
            }

            return R.error("短信发送失败");
    }
    @PostMapping("/login")
    public R<User> login(@RequestBody Map map,HttpSession httpSession) {
        log.info(map.toString());
        //获取客户端传来的phone和code
        String phone = map.get("phone").toString();
        String code = map.get("code").toString();
        //与之前在session保存的对比-----k-v形式
        Object code1 = httpSession.getAttribute(phone);
        if (code1 != null && code1.equals(code)) {
            //查询user表数据,判断当前手机号是否为新用户,如果是新用户则自动完成注册
            LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
            qw.eq(User::getPhone, phone);
            User user = userService.getOne(qw);
            if (user == null) {
                //新用户自动创建
                user = new User();
                user.setPhone(phone);
                user.setStatus(1);
                userService.save(user);
            }
            //用户不为空,登录
            httpSession.setAttribute("user", user.getId());
            return R.success(user);
        }
        return R.error("登录失败");
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值