- 前端
<img src="code" alt="" width="100" height="32" "this.src=this.src+'?'">
- 后端
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ValidateCodeController {
public static final char[] CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//自定义验证码池
public static Random random = new Random(); //随机数
public static Color getReverseColor() { //获取随机颜色
return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));
}
@RequestMapping(value = "code")
public void getCode(HttpServletRequest request,HttpServletResponse response) {
response.setContentType("image/jpeg"); //设置输出类型
int width = 68; //图片宽度
int height = 22; //图片高度
Color color = new Color(248,248,255); //随机颜色,用于背景色
//创建一个彩色图片
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics2D g = bi.createGraphics(); //绘图对象
g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16)); //设置字体
g.setColor(color); //设置颜色
g.fillRect(0, 0, width, height); //绘制背景
StringBuffer randomString = new StringBuffer();
for(int i = 0;i < 4; i++) {
g.setColor(getReverseColor());
char c = CHARS[random.nextInt(CHARS.length)];
randomString.append(c);
g.drawString(c + "", (i*15)+3, 18);//绘制随机字符
}
request.getSession(true).setAttribute("randomString", randomString); //放到session里
for (int i = 0,n = random.nextInt(50); i < n; i++) { //最多画50个噪音点
g.setColor(getReverseColor());
g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
}
ServletOutputStream out = null;
try {
out = response.getOutputStream(); //转成JPEG格式
ImageIO.write(bi, "jpeg", out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}