1:代码 @Value("${sms.username}") 可以将sms.properties配置文件中的值注入到username
1 //这种方式是将sms.properties里的值注入到属性中 2 @Value("${sms.username}") 3 private String username; 4 5 @Value("${sms.password}") 6 private String password; 7 8 @Value("${sms.apiKey}") 9 private String apiKey; 10 11 @Value("${sms.url}") 12 private String url; 13 14 @Override 15 public void sendVerifyCode(String phoneNumber) { 16 17 // 首先的到session中VerifyCodeVo 18 VerifyCodeVO vc = UserContext.getVerifyCode(); 19 if (vc == null // 表示没有发过验证码 如果已经发送了要判断两次发送之间的时间间隔 20 || (vc != null && DateUtil.getSecondsBetweenDates(vc.getSendTime(),new Date()) 21 >= BidConst.SEND_VERIFYCODE_INTERVAL)) { 22 // 生成一个验证码 23 String code = UUID.randomUUID().toString().substring(0, 4); 24 try { 25 // 创建一个URL对象 26 URL targetUrl = new URL(this.url); 27 // 从URL对象中获得一个连接对象 28 HttpURLConnection conn = (HttpURLConnection) targetUrl.openConnection(); 29 // 设置请求方式 注意这里的POST或者GET必须大写 30 conn.setRequestMethod("POST"); 31 // 设置POST请求是有请求体的 32 conn.setDoOutput(true); 33 // 拼接发送的短信内容 34 StringBuilder params = new StringBuilder(100) 35 .append("username=").append(username) 36 .append("&password=").append(password) 37 .append("&apikey=").append(apiKey).append("&mobile=") 38 .append(phoneNumber).append("&content=") 39 .append("您的验证码是:").append(code).append(",有效时间是:") 40 .append(BidConst.VERIFYCODE_VALID_TIME).append("秒!"); 41 // 写入参数 42 conn.getOutputStream().write(params.toString().getBytes()); 43 // 读入响应 44 String response = StreamUtils.copyToString( 45 conn.getInputStream(), Charset.forName("UTF-8")); 46 // 发送成功 以success开头 47 if (response.startsWith("success")) { 48 // 构建一个vo对象 将vo放入session中 49 vc = new VerifyCodeVO(phoneNumber, code, new Date()); 50 UserContext.putVerifyCode(vc); 51 }else{ 52 throw new RuntimeException(); 53 } 54 // 构建一个vo对象 将vo放入session中 55 // vc = new VerifyCodeVO(phoneNumber, code, new Date()); 56 // UserContext.putVerifyCode(vc); 57 System.out.println("手机号" +phoneNumber +"验证码:" + code ); 58 } catch (Exception e) { 59 e.printStackTrace(); 60 throw new RuntimeException("发送短信失败"); 61 } 62 } else { 63 throw new RuntimeException("发送过于频繁"); 64 } 65 }
2:sms.properties配置文件
1 sms.username=admin 2 sms.password=admin 3 sms.url=http://172.16.71.27:8082/send.do 4 sms.apiKey=admin
3:调用的其它项目中Controller层中的 send.do 方法实现
1 @RequestMapping("/send") 2 @ResponseBody 3 public String send(String username, String password, String apikey, String mobile, String content) { 4 System.out.println("发送短信给手机:" + mobile + ",发送短信内容为:" + content); 5 return "success";
6 }