调用语音验证码的接口

  语音验证码就是以打电话的方式,通过电话语音播报的方式把验证码告诉给用户,语音验证码使用的不多。

因为第三方的接口价格相对于短信验证码来说比较贵,并且效果一般,只能发送纯数字的语音,而且还没有干扰音,这种语音很容易就被识别了,安全性上也比较低。

如果想要做好一个语音验证码,就得自己单独去做这个模块的开发,需要花费的成本比较大,一般大部分的应用都没有这个必要去开发这个模块,所以语音验证码就不怎么有人使用。本文也是演示简单的调用一下第三方的接口,作为示例。

准备工作:

  1. 先申请一个语言验证码的API(我这里申请的是聚合的),首次申请有3次免费的调用机会:

5102

5103

然后会让你认证,如果只是临时做个试验的话,可以选择不认证:

5104

申请之后,查看一下接口的说明文档:

5105

需要按照文档里的说明规则去调用这个接口:

5106

完成以上步骤准备好接口后,在编写代码之前先导入一个JSON的jar包,因为API调用后返回结果的形式是JSON格式,所以需要JSON的jar包来解析JSON的数据:

5107

完成准备工作后,就可以开始编写具体的代码了,因为调用次数只有3次,我就只写一个简单的类作为演示:

5108

5109

发送成功:

5110

发送失败:

5111

图形验证码组件

  所谓验证码组件就是拿别人写好的第三方jar包来用,我这里演示的是jcaptcha的组件。

JCaptcha 简介:

  CAPTCHA 全称 Completely Automated Public Turing Test to Tell Computers and Humans Apart,最早作为卡内基梅隆大学的一个科研项目,用于生成一个人类容易通过而计算机难以通过的测试,目前广泛应用于网络应用,用于阻止机器人发布垃圾信息。JCaptcha 即为 Java 版本的 CAPTCHA 项目,其是一个开源项目,支持生成图形和声音版的验证码,在生成声音版的验证码时,需要使用到 FreeTTS。目前,JCaptcha 官方网站显示有 2.0 版本,但二进制版只有 1.0 版可供下载,本文亦是基于 1.0 版本展开。

一个简单的图形验证码:

  JCaptcha 提供了一定的可扩展能力,用于开发人员创建出复杂的图形验证码。下面,首先利用 JCaptcha 提供的 API 来快速开发一个简单示例。本文的示例为 Web 应用,可以运行在 Tomcat 和 WebSphere 上,除了准备 Web 服务器外,我们还需要准备好 JCaptcha 运行时所必须的 Jar 包。

以下是需要用到的jar包,这些jar包都可以在maven的中央仓库中下载到:

5113

创建一个web工程,把jar导入到lib目录下,然后配置web.xml文件,配置语法如下:

5114

配置完web.xml之后实际上,直接访问这个jcaptcha.jpg就可以看到验证码的效果了:

5115

  这是默认的效果,实际上如果你不需要有变动的话,就可以直接这样使用。

  如果你需要去自定义这个图片验证码样式的话,就得自己专门写一个类来进行调整,代码示例:

5116

5117

5118

5119

5120

运行结果:

5121

ServletConfig和ServletContext对象

  ServletConfig可以用于得到web.xml中配置的参数信息,例如配置数据库参数、系统参数信息等等。因为我们可以把一些参数信息配置在web.xml的servlet标签内,通过ServletConfig对象和init方法就可以在Servlet启动的时候就可以获得这些配置信息。

简单的配置语法:

5122

在 <init-param> 标签内配置初始化参数信息,<param-name> 标签配置参数信息的名称,<param-value> 则是这个名称的值。

Servlet代码:

5123

ServletConfig对象中没有什么方法,这个对象主要就是用于获得参数信息而已。

运行结果:

5124

配置多个参数信息:

5125

运行结果:

5126

  ServletContext对象是一个全局对象,在任何情况下获得的对象都是同一个,服务器开始,这个对象就会存在,服务器关闭,ServletContext才会被释放。ServletContext可以像session对象一样用来存储一些数据信息,与session不同的是ServletContext存储时间是永久的,而session则是默认有30分钟的过期时间。

关于Servlet中的三个可以存储用户数据的对象:

  request对象一个用户可有多个,其生命周期在请求结束时结束;session对象一个用户一个,其生命周期在默认的情况下,只会存在30分钟;而servletContext,则是所有用户共用一个,其生命周期直到服务器关闭才结束。所以为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息,不然只会徒增服务器压力。

获得ServletContext对象的方式:

  request.getServletContext()  // 通过request对象获得

  request.getSession().getServletContext()  // 通过Session对象获得

  this.getServletContext()  // 通过Servlet对象获得

  this.getServletConfig().getServletContext() // 通过ServletConfig对象获得

一般情况下,常用的方式是// 通过Servlet对象获得。

ServletContext对象中的一些常见的方法:

context.getAttribute(arg0);   // 得到属性

context.setAttribute(arg0, arg1);  // 添加属性

context.removeAttribute(arg0);  // 删除属性

context.getServlets();  //得到服务器中的所有Servlet

context.addServlet("", "");  // 添加Servlet

context.addFilter("", "");   // 添加过滤器

context.addListener(arg0);   // 添加监听器

getServerInfo()  // 得到web服务器的信息

getContextPath()  // 得到web工程的路径

getRealPath("WEB-INF")  // 得到指定文件或目录的路径

getSessionTimeout()  // 得到Session的过期时间

代码示例:

5127

运行结果:

5128

如果文中图片失效,请点击以下链接查看: