栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

注册账号

选择短信服务-国内消息

创建短信模板

 创建AccessKey

 添加AccessKey的使用权限

设置启用和禁用AccessKey​编辑

 代码开发


注册账号

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

点击官网首页注册按钮。

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

选择短信服务-国内消息

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

创建短信模板

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

 创建AccessKey

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

 添加AccessKey的使用权限

设置启用和禁用AccessKey

 代码开发

1、导入maven坐标


        
            com.aliyun
            aliyun-java-sdk-core
            4.5.16
        
        
            com.aliyun
            aliyun-java-sdk-dysmsapi
            2.1.0
        

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

public class SMSUtils {

	
	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 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 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 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("登录失败");
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号