验证码
1 手写验证码
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author : code1997
* @date :2020-09-2020/9/11 12:14
*/
public class Demo01 {
public static void main(String[] args) throws IOException {
//1.创建一个画板
BufferedImage bufferedImage = new BufferedImage(200, 40, BufferedImage.TYPE_INT_RGB);
//2.创建一个笔
Graphics2D graphics = (Graphics2D)bufferedImage.getGraphics();
//3.选背景色
graphics.setColor(Color.WHITE);
//4.画背景
graphics.fillRect(1, 1, 198, 38);
//5.选字体颜色
graphics.setColor(Color.black);
//6.创建font指定字体样式
Font font = new Font(null, Font.BOLD, 30);
graphics.setFont(font);
//7.设置要显示的信息
String yzm="中国";
for (int i = 0; i < yzm.length(); i++) {
//7.1将字写到画板上去
graphics.drawString(yzm.charAt(i)+"",50+i*40 , 30);
//7.2画干扰线
graphics.drawLine(20, 5, 160, 35);
}
//8.创建一个文件输出流
FileOutputStream fileOutputStream = new FileOutputStream("e:/yzm.jpg");
//9.将内存中的图输出到目的文件中
ImageIO.write(bufferedImage, "JPEG", fileOutputStream);
}
}
显示效果:
2 使用谷歌的验证码-推荐使用
1 导入jar包: kaptcha-2.3.2.jar
2 配置servlet
<servlet>
<servlet-name>KaptchaServlet</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>KaptchaServlet</servlet-name>
<url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>
3 前端页面+验证
<img id="codeImg" alt="验证码" style="float: right; margin-right: 40px;width: 110px;height: 30px" src="<c:url value="/kaptcha.jpg"/>">
//点击切换图片,加上时间防止缓存
$("#codeImg").click(function () {
this.src="<c:url value="/kaptcha.jpg?times="/>"+new Date();
})
4 访问:http://localhost:8080/16_temp/kaptcha.jpg
5 后台获取验证码的值:
String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
5 过程分析: