Jedis实现手机号验证码
要求
1.输入手机号,点击发送后随机生成6位数字码,2分钟有效
2.输入验证码,点击验证,返回成功或失败
3.每个手机号每天只能输入3次
1.index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script src="/Verify_code/static/jquery/jquery-3.1.0.js" ></script>
<link href="/Verify_code/static/bs/css/bootstrap.min.css" rel="stylesheet" />
<script src="/Verify_code/static/bs/js/bootstrap.min.js" ></script>
</head>
<body>
<div class="container">
<div class="row">
<div id="alertdiv" class="col-md-12">
<form class="navbar-form navbar-left" role="search" id="codeform">
<div class="form-group">
<input type="text" class="form-control" placeholder="填写手机号" name="phone_no">
<button type="button" class="btn btn-default" id="sendCode">发送验证码</button><br>
<font id="countdown" color="red" ></font>
<br>
<input type="text" class="form-control" placeholder="填写验证码" name="verify_code">
<button type="button" class="btn btn-default" id="verifyCode">确定</button>
<font id="result" color="green" ></font><font id="error" color="red" ></font>
</div>
</form>
</div>
</div>
</div>
</body>
<script type="text/javascript">
var t=120;//设定倒计时的时间
var interval;
function refer(){
$("#countdown").text("请于"+t+"秒内填写验证码 "); // 显示倒计时
t--; // 计数器递减
if(t<=0){
clearInterval(interval);
$("#countdown").text("验证码已失效,请重新发送! ");
}
}
$(function(){
$("#sendCode").click( function () {
$.post("/Verify_code/CodeSenderServlet",$("#codeform").serialize(),function(data){
if(data=="true"){
t=120;
clearInterval(interval);
interval= setInterval("refer()",1000);//启动1秒定时
}else if (data=="limit"){
clearInterval(interval);
$("#countdown").text("单日发送超过次数! ")
}
});
});
$("#verifyCode").click( function () {
$.post("/Verify_code/CodeVerifyServlet",$("#codeform").serialize(),function(data){
if(data=="true"){
$("#result").attr("color","green");
$("#result").text("验证成功");
clearInterval(interval);
$("#countdown").text("");
}else{
$("#result").attr("color","red");
$("#result").text("验证失败");
}
});
});
});
</script>
</html>
2.CodeSenderServlet.java(发送验证码)
@WebServlet("/CodeSenderServlet")
public class CodeSenderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CodeSenderServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取手机号
String phone_no = request.getParameter("phone_no");
//获取验证码
String code = getCode(6);
//拼接key
String codeKey = "Verify_code:" + phone_no + ":code";//Verify_code:12345:code
String countKey = "Verify_code:" + phone_no + ":count";
Jedis jedis = new Jedis("192.168.44.132", 6379);
//判断发送验证码的次数
String count = jedis.get(countKey);
if(count == null) {
//代表第一次
jedis.setex(countKey, 24*60*60, "1");
}else if(Integer.parseInt(count) <= 2) {
jedis.incr(countKey);
}else if(Integer.parseInt(count) > 2) {
response.getWriter().print("limit");
jedis.close();
return ;
}
//向redis中进行存储,以手机号为键,以验证码为值
jedis.setex(codeKey, 120, code);
jedis.close();
response.getWriter().print(true);
}
private String getCode(int length) {
String code = "";
Random random = new Random();
for(int i = 0; i < length; i++) {
int rand = random.nextInt(10);
code += rand;
}
return code;
}
}
3.验证
@WebServlet("/CodeVerifyServlet")
public class CodeVerifyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CodeVerifyServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取验证码和手机号
String phone_no = request.getParameter("phone_no");
String verify_code = request.getParameter("verify_code");
//拼接key
String codeKey = "Verify_code:" + phone_no + ":code";
//从redis中获取手机号所对应的验证码
Jedis jedis = new Jedis("192.168.44.132", 6379);
String code = jedis.get(codeKey);
if(code.equals(verify_code)) {
response.getWriter().print(true);
}
jedis.close();
}
}