Java实现验证码登录验证功能,简单易懂
package com.hui.he;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class ImageVerificationCode {
private int weight = 100;
private int height = 40;
private String text;
private Random r = new Random();
private String[] fontNames = {"Georgia"};
private String codes = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
private Color randomColor() {
int r = this.r.nextInt(225);
int g = this.r.nextInt(225);
int b = this.r.nextInt(225);
return new Color(r, g, b);
}
private Font randomFont() {
int index = r.nextInt(fontNames.length);
String fontName = fontNames[index];
int style = r.nextInt(4);
int size = r.nextInt(10) + 24;
return new Font(fontName, style, size);
}
private char randomChar() {
int index = r.nextInt(codes.length());
return codes.charAt(index);
}
private void drawLine(BufferedImage image) {
int num = r.nextInt(10);
Graphics2D g = (Graphics2D) image.getGraphics();
for (int i = 0; i < num; i++) {
int x1 = r.nextInt(weight);
int y1 = r.nextInt(height);
int x2 = r.nextInt(weight);
int y2 = r.nextInt(height);
g.setColor(randomColor());
g.drawLine(x1, y1, x2, y2);
}
}
private BufferedImage createImage() {
BufferedImage image = new BufferedImage(weight, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) image.getGraphics();
g.setColor(new Color(255, 255, r.nextInt(245) + 10));
g.fillRect(0, 0, weight, height);
return image;
}
public BufferedImage getImage() {
BufferedImage image = createImage();
Graphics2D g = (Graphics2D) image.getGraphics();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++)
{
String s = randomChar() + "";
sb.append(s);
float x = i * 1.0F * weight / 4;
g.setFont(randomFont());
g.setColor(randomColor());
g.drawString(s, x, height - 5);
}
this.text = sb.toString();
drawLine(image);
return image;
}
public String getText() {
return text;
}
public static void output(BufferedImage image, OutputStream out) throws IOException
{
ImageIO.write(image, "JPEG", out);
}
}
@WebServlet( "/yzm1Servlet")
public class Yzm1Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ImageVerificationCode imageVerificationCode=new ImageVerificationCode();
OutputStream outputStream=response.getOutputStream();
BufferedImage bufferedImage=imageVerificationCode.getImage();
String text=imageVerificationCode.getText();
request.getSession().setAttribute("YZM",text);
}
}
<script>
function fun(){
var date=new Date().getTime();
var img=document.getElementById("aa");
img.src="yzm1Servlet?"+date;
}
</script>
<body>
<form action="dengServlet">
请输入验证码:<input type="text" id="bb" name="wen" >
<input type="submit" value="提交" >
</form>
<img src="yzm1Servlet" onclick="fun()" id="aa"/>
</body>
- 点击提交进入判断输入文本和图片内容是否相同的servlet中
@WebServlet("/dengServlet")
public class DengServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String wen=request.getParameter("wen");
String wen1=(String)request.getSession().getAttribute("YZM");
if(wen.equals(wen1)){
response.sendRedirect("aa.jsp");
}else{
response.sendRedirect("bb.jsp");
}
}
}
效果图