JavaWeb实现验证码
1:引入Kaptcha相关的jar包
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
2:在web.xml中添加servlet配置
<servlet>
<servlet-name>kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<init-param>
<param-name>kaptcha.border</param-name>
<param-value>no</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.font.color</param-name>
<param-value>blue</param-value>
</init-param>
<init-param>
<param-name>kaptcha.image.width</param-name>
<param-value>130</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.string</param-name>
<param-value>ajgjoangJANKLPG9623451</param-value>
</init-param>
<init-param>
<param-name>kaptcha.image.height</param-name>
<param-value>50</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.font.size</param-name>
<param-value>43</param-value>
</init-param>
<init-param>
<param-name>kaptcha.noise.color</param-name>
<param-value>black</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.length</param-name>
<param-value>4</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.font.names</param-name>
<param-value>Arial</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>kaptcha</servlet-name>
<url-pattern>/kaptcha</url-pattern>
</servlet-mapping>
前端发送请求后,kaptcha会按照设置生成随机的验证码图片。
3:编写前端页面(form表单)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>验证码</title>
</head>
<body>
<form action="/checkCode" method="POST">
<img src="/kaptcha" alt="验证码" onclick="refresh(this)">
<input type="text" name="code">
</form>
</body>
<script>
function refresh(img) {
img.src = "../kaptcha?"+Math.floor(Math.random()*100);
}
</script>
</html>
4:校验(验证码)的servlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import com.google.code.kaptcha.Constants;
@WebServlet("/checkCode")
public class CheckCode extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String code = req.getParameter("code");
code = code.toLowerCase();
String realCode = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
if (code == null || "".equals(code) || null == realCode || "".equals(realCode)){
System.out.println(false);
return;
}
if (code.equals(realCode.toLowerCase())){
System.out.println(true);
}
}
}
5:小结
kaptcha生成一个验证码图片,并将生成验证码的字符放在session的作用域里。
在form表单提交验证码后,通过request到session中获取生成验证码的字符,与form输入的验证码字符作比较。
6:收工
最近一个小项目中用到,就把这块提出来,做个记录!!!
代码是从现在写的项目中抽出来的,只作为一个简单的demo参考。
将验证码最简单的实现,拼凑出来做个记录,目前还没有实测。