html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.8.0/jquery-1.8.0.min.js"></script>
<script type="application/javascript">
function newimage() {
document.getElementById("codeimg").src="/createImage?date="+new Date();
}
function newimage02() {
document.getElementById("codeimg2").src="/captcha?date="+new Date();
}
</script>
</head>
<body>
<p><img id="codeimg" src="/createImage"/>
<a href="javascript:newimage();">看不清</a>
<input type="text" id="text01"/>
<input type="button" id="btn01" value="btn01"/>
</p>
<p><img id="codeimg2" th:src="@{/captcha}"/>
<a href="javascript:newimage02();">看不清</a>
<input type="text" id="text02"/>
<input type="button" id="btn02" value="btn02"/>
</p>
<script type="application/javascript">
$("#btn01").click(function(){
var codeimg = $("#text01").val();
$.ajax({
type: "GET",
url : "checkImgCode1/" + codeimg,
success: function(data){
alert(data.msg);
}
});
});
$("#btn02").click(function(){
var codeimg2 = $("#text02").val();
$.ajax({
type: "GET",
url : "checkImgCode2/" + codeimg2,
success: function(data){
alert(data.msg);
}
});
});
</script>
</body>
</html>
controller
package com.shengun.controller;
import com.shengun.pojo.JsonReturn;
import com.wf.captcha.utils.CaptchaUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;
@Controller
public class ImageController {
public static final int WIDTH = 120;
public static final int HEIGHT = 23;
public static final int WORDS_NUMBER = 4;
@RequestMapping("/capt")
public String capt(){
return "capt";
}
@RequestMapping("/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
CaptchaUtil.out(request, response);
}
@RequestMapping("/createImage")
public void createImage(HttpServletResponse response, HttpSession session) throws Exception{
BufferedImage bi = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_3BYTE_BGR);
Graphics g = bi.getGraphics();
setBackGround(g);
setBorder(g);
drawRandomLine(g);
String randomString = this.drawRandomNum((Graphics2D)g, "nl");
session.setAttribute("checkcode", randomString);
System.out.println("系统正确的验证码是:"+randomString);
response.setContentType("image/jpeg");
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(bi, "jpg", response.getOutputStream());
}
@RequestMapping("/checkImgCode1/{codeimg}")
@ResponseBody
public JsonReturn checkImgCode1(@PathVariable("codeimg") String codeimg, HttpSession session){
System.out.println(codeimg);
String checkcode = (String) session.getAttribute("checkcode");
if(checkcode != null){
if (checkcode.equalsIgnoreCase(codeimg)) {
return JsonReturn.buildSuccess("验证码一致,登录成功");
}
}
return JsonReturn.buildSuccess("验证码不一致");
}
@RequestMapping("/checkImgCode2/{codeimg2}")
@ResponseBody
public JsonReturn checkImgCode2(@PathVariable("codeimg2") String codeimg2,HttpServletRequest request){
System.out.println(codeimg2);
if(!CaptchaUtil.ver(codeimg2,request)){
CaptchaUtil.clear(request);
return JsonReturn.buildSuccess("验证码不一致");
}
return JsonReturn.buildSuccess("验证码一致,登录成功");
}
private void setBackGround(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
}
private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH - 2, HEIGHT -2);
}
private void drawRandomLine(Graphics g) {
g.setColor(Color.GREEN);
for ( int i = 0 ; i < 3 ; i++ ) {
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int x2 = new Random().nextInt(WIDTH);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private String drawRandomNum(Graphics g,String createTypeFlag) {
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD,20));
String baseNumLetter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
String baseNum = "0123456789";
String baseLetter = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
if ( createTypeFlag != null && createTypeFlag.length() > 0 ) {
if( createTypeFlag.equals("nl") ) {
return createRandomChar((Graphics2D) g,baseNumLetter);
} else if ( createTypeFlag.equals("n") ) {
return createRandomChar((Graphics2D) g,baseNum);
} else if ( createTypeFlag.equals("l") ) {
return createRandomChar((Graphics2D) g,baseLetter);
}
} else {
return createRandomChar((Graphics2D) g,baseNumLetter);
}
return "";
}
private String createRandomChar(Graphics2D g , String baseChar) {
StringBuffer b = new StringBuffer();
int x = 5;
String ch = "";
for ( int i = 0 ; i < WORDS_NUMBER ; i++ ) {
int degree = new Random().nextInt() % 30;
ch = baseChar.charAt(new Random().nextInt(baseChar.length())) + "";
b.append(ch);
g.rotate(degree * Math.PI / 180 , x,20);
int red = new Random().nextInt(255);
int green = new Random().nextInt(255);
int blue = new Random().nextInt(255);
Color color=new Color(red,red,blue);
g.setColor(color);
g.drawString(ch, x, 20);
g.rotate(-degree * Math.PI / 180 , x,20);
x+=30;
}
return b.toString();
}
}