1:代码   @Value("${sms.username}")  可以将sms.properties配置文件中的值注入到username

     //这种方式是将sms.properties里的值注入到属性中
@Value("${sms.username}")
private String username; @Value("${sms.password}")
private String password; @Value("${sms.apiKey}")
private String apiKey; @Value("${sms.url}")
private String url; @Override
public void sendVerifyCode(String phoneNumber) { // 首先的到session中VerifyCodeVo
VerifyCodeVO vc = UserContext.getVerifyCode();
if (vc == null // 表示没有发过验证码 如果已经发送了要判断两次发送之间的时间间隔
|| (vc != null && DateUtil.getSecondsBetweenDates(vc.getSendTime(),new Date())
>= BidConst.SEND_VERIFYCODE_INTERVAL)) {
// 生成一个验证码
String code = UUID.randomUUID().toString().substring(0, 4);
try {
// 创建一个URL对象
URL targetUrl = new URL(this.url);
// 从URL对象中获得一个连接对象
HttpURLConnection conn = (HttpURLConnection) targetUrl.openConnection();
// 设置请求方式 注意这里的POST或者GET必须大写
conn.setRequestMethod("POST");
// 设置POST请求是有请求体的
conn.setDoOutput(true);
// 拼接发送的短信内容
StringBuilder params = new StringBuilder(100)
.append("username=").append(username)
.append("&password=").append(password)
.append("&apikey=").append(apiKey).append("&mobile=")
.append(phoneNumber).append("&content=")
.append("您的验证码是:").append(code).append(",有效时间是:")
.append(BidConst.VERIFYCODE_VALID_TIME).append("秒!");
// 写入参数
conn.getOutputStream().write(params.toString().getBytes());
// 读入响应
String response = StreamUtils.copyToString(
conn.getInputStream(), Charset.forName("UTF-8"));
// 发送成功 以success开头
if (response.startsWith("success")) {
// 构建一个vo对象 将vo放入session中
vc = new VerifyCodeVO(phoneNumber, code, new Date());
UserContext.putVerifyCode(vc);
}else{
throw new RuntimeException();
}
// 构建一个vo对象 将vo放入session中
// vc = new VerifyCodeVO(phoneNumber, code, new Date());
// UserContext.putVerifyCode(vc);
System.out.println("手机号" +phoneNumber +"验证码:" + code );
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("发送短信失败");
}
} else {
throw new RuntimeException("发送过于频繁");
}
}

2:sms.properties配置文件

 sms.username=admin
sms.password=admin
sms.url=http://172.16.71.27:8082/send.do
sms.apiKey=admin

3:调用的其它项目中Controller层中的 send.do 方法实现

     @RequestMapping("/send")
@ResponseBody
public String send(String username, String password, String apikey, String mobile, String content) {
System.out.println("发送短信给手机:" + mobile + ",发送短信内容为:" + content);
return "success";
}

java后台调用http请求的更多相关文章

  1. java后台调用HttpURLConnection类模拟浏览器请求(一般用于接口调用)

    项目开发中难免遇到外部接口的调用,小生今天初次接触该类,跟着API方法走了一遍,如有不对的地方,还请哆哆指正,拜谢! 1 package com.cplatform.movie.back.test; ...

  2. Java后台调用gcc编译C语言代码

    想做一个能够在线编译代码运行的平台,Java和SQL已经支持了,因为是用Java写的后台,所以Java和SQL挺容易就实现了,做到支持C的时候就卡住了,网上搜了一下这种帖子好像很少. 我采取的办法是就 ...

  3. java后台调用url无协议

    url格式不正确,可能有"www.baidu.com"    "这个不能有 // 下载pdf public void downpdf(String URL, String ...

  4. md5签名加密(用于java 后台调用短信平台接口实现发短信)

    MD5Util 方法 package com.funcanteen.business.action.pay.util; import java.security.MessageDigest; publ ...

  5. java后台调用文件上传接口

    借鉴:https://blog.csdn.net/yjclsx/article/details/70675057 /** * 调用流程上传文件接口上传文件 * @param url * @param ...

  6. java后台调用url

    版权声明:本文为博主牟云飞原创文章,未经博主同意不得转载. https://blog.csdn.net/myfmyfmyfmyf/article/details/32690757 QXOutStrea ...

  7. java调用http请求json

    最近遇到的问题,java如何调用http请求json: public class HttpClientUtil { private static final String CONTENT_TYPE_T ...

  8. Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)

    一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...

  9. node作为中间层 —> 跨域请求java后台接口(使用http-proxy-middleware中间件)

    情景:利用node的express 作为中间层,跨域调取java后台接口,由于java接口对session有判断,因此每次请求都必须在req的headers中需要带上cookie,否则接口报500错误 ...

随机推荐

  1. shell 指令 摘录

    作者: learner811    本文摘自网络    权限:用户 读写 ugoa rwx * useradd userdel groupadd groupmod usermod su sudo wh ...

  2. P1503 鬼子进村

    题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里 ...

  3. java的object类函数详解

    1.clone方法(浅拷贝) 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常. 主要是JAVA里除了8种 ...

  4. hdu 5195 DZY Loves Topological Sorting (拓扑排序+线段树)

    DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 ...

  5. CF1083C Max Mex 线段树

    题面 CF1083C Max Mex 题解 首先我们考虑,如果一个数x是某条路径上的mex,那么这个数要满足什么条件? 1 ~ x - 1的数都必须出现过. x必须没出现过. 现在我们要最大化x,那么 ...

  6. 如何合理的规划jvm性能调优

    JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响.但也有一些基础的理论和原则,理解这些理论并遵循这些原则会让你的性能调优任务将会更加轻松.为了更好的理解本篇所介绍的内 ...

  7. BZOJ 2426: [HAOI2010]工厂选址

    2426: [HAOI2010]工厂选址 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 364  Solved: 248[Submit][Status ...

  8. uoj132/BZOJ4200/洛谷P2304 [Noi2015]小园丁与老司机 【dp + 带上下界网络流】

    题目链接 uoj132 题解 真是一道大码题,,,肝了一个上午 老司机的部分是一个\(dp\),观察点是按\(y\)分层的,而且按每层点的上限来看可以使用\(O(nd)\)的\(dp\),其中\(d\ ...

  9. JS的对象原型

    1.对象 1.1 语法 对象可以通过两种形式定义:声明(文字)形式和构造形式. 对象的文字语法: var myObj = { key : value //... }; 对象的构造语法: var myO ...

  10. Android 65535 问题与 MultiDex分包

    Android Multidex 遇到的问题 http://blog.csdn.net/wangbaochu/article/details/51178881 Android 使用android-su ...