现在的位置: 首页 > web前端 > 正文

01-短信验证码、动态验证码

2020年02月12日 web前端 ⁄ 共 3165字 ⁄ 字号 评论关闭
文章目录

说明:(生成Gif、Png类型的图形验证码)

最近两次做项目,一些功能性的代码重复的写因此非常的麻烦。因此记录一下,以防下次。

1、功能性代码:图形绘制、验证码生成。

1、导入别人写好的工具父类、以及需要支持的工具类。(最主要的)

工具类已经被我导出成Jar的形式:工具类地址

    父类 Captcha、两个子类 PngCaptchaGifCaptcha

2、编写一个公共的Controller请求、用于复用获取图形验证码。

/** * @param time * 回调多次请求的时候根据系统当前时间来进行不同的请求,防止同一时间重复进行多次请求。 * 注意:将值存入session中,以便获取验证码的值,通过覆盖进行值更新。 * 1.只要登录不成功即需要每次进行请求新的验证码。 * 2.需要设置响应头,告诉浏览器,并且不进行缓存。 * 3.session为true的时候当request不存在session,则创建一个;一般用于存、取数据。 * 4.session默认为true,session为false一般用于查询数据的时候,没有session不会创建新的; */@RequestMapping(value = "/getGifCode.html", method = RequestMethod.GET)public void getGifCode(@RequestParam(required=false) String time,HttpServletResponse response,HttpServletRequest res) throws IOException { HttpSession session = res.getSession(true); // 设置响应信息 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/gif"); /* * 1.创建gif格式动画验证码 宽,高,位数。 * 2.向客户端响应输出gif动态验证信息。 * 3.此处可以通过实例化PngCaptcha()获取png图形验证码。 * 4.captcha两个方法,out()输出图片、text()获取文本。 */ Captcha captcha = new GifCaptcha(120, 40, 5); captcha.out(response.getOutputStream()); // 将验证码随机产生的随机验证码信息存入Session之中。 session.setAttribute(GlobalConstant.captcha, captcha.text()); System.out.println("生成的验证码:"+captcha.text());}}

3、前端获取方式

<p style="margin-left: 10px;"><img src="getGifCode.html" > <!-- 点击产生图片,编写JS参数为 time=Date.getTime() --></p>

2、短信验证码的实现

依赖的类、依赖的jar包:

<!-- 发送短信依赖包 --><dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency>

额外的依赖类(导入官方下载的Demo即可):

实现接口: 使用第三方云之讯的SDK,官网地址;

配置文件:

#测试使用is_test=truerest_server=open.ucpaas.com

实现短信验证码的工具类: 具体看官方api

/** * @ClassName: SendSMSTool * @Description: 主要调用 云之讯 接口发送短信工具类 * @author Unruly * @date 2018年12月28日 */public class SendSMSTool {static AbsRestClient InstantiationRestAPI() {return new JsonReqClient();}public static String SendMessage(String randNum, String mobile){if(StringUtils.isBlank(mobile)) {return "手机号:Is a blank";}String sid = "****************************";String token = "****************************";String appid ="****************************";String templateid ="415648";// 发送的短信验证码模板String result=InstantiationRestAPI().sendSms(sid, token, appid, templateid, randNum, mobile, appid);JSONObject json = JSONObject.parseObject(result);return json.getString("msg");}}

控制层处理请求方式:

/** * 发送短信的方法 * @param num 手机号 * @param res * @return 发送的状态 * @throws Exception */@ResponseBody@RequestMapping(value = "/sendMessage")public Object getSMS(@RequestParam(name = "phone", required = true) String phone) throws Exception { HashMap<String, Object> map = new HashMap<>(16); HttpSession session = ServletTool.getSession(); map.put(GlobalConstant.code, 1001); map.put(GlobalConstant.msg, "发送信息失败:请输入合法的手机号!"); if (!StringUtils.isBlank(phone) && GlobalRegTool.phone_reg(phone)) { /* 随机的生成的手机验证码 */ String phoneVercode = String.valueOf(RandomUtils.nextInt(10000, 100000)); String sendMessage = SendSMSTool.SendMessage(phoneVercode, phone); map.put(GlobalConstant.code,0); map.put(GlobalConstant.msg, sendMessage); session.setAttribute(GlobalConstant.session_phone, phone); // 将验证信息存入Session session.setAttribute(GlobalConstant.phone_code, phoneVercode); } return map;}

以上就上有关01-短信验证码、动态验证码的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.