Kaptcha验证码
Kaptcha的使用:
1.在pom.xml中添加依赖,在applicationContext.xml中配置Kaptcha

2.在applicationContext.xml中配置Kaptcha

3.开发KapatchaController生成验证码图片
package com.imooc.reader.controller;
import com.google.code.kaptcha.Producer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
@Controller
public class KaptchaController {
@Resource
private Producer kaptchaProducer;
@GetMapping("/verify_code")
public void createVerifyCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
//响应立即过期
response.setDateHeader("Expires",0);
//不缓存任何图片数据
response.setHeader("Cache-Control", "no-store,no-cache,must-revalidate");
response.setHeader("Cache-Control","post-check=0,pre-check=0");
response.setHeader("Pragma","no-cache");
response.setContentType("image/png");
//生成验证码字符文本
String verifyCode = kaptchaProducer.createText();
request.getSession().setAttribute("kaptchaVerifyCode",verifyCode);
System.out.println(request.getSession().getAttribute("kaptchaVerifyCode"));
//创建验证码图片
BufferedImage image = kaptchaProducer.createImage(verifyCode);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "png", out);
out.flush();
out.close();
}
}
4.将生成图片方法绑定的url写入前端页面

package com.imooc.reader.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
@Controller
public class MemberController {
@GetMapping("/register.html")
public ModelAndView showRegister() {
return new ModelAndView("/register");
}
}

4.将前台输入验证码与session保存的验证码进行比对
package com.imooc.reader.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@Controller
public class MemberController {
@GetMapping("/register.html")
public ModelAndView showRegister() {
return new ModelAndView("/register");
}
@PostMapping("/registe")
@ResponseBody
public Map registe(String vc, String username, String password, String nickname, HttpServletRequest request){
//获取验证码
String verifyCode = (String) request.getSession().getAttribute("kaptchaVerifyCode");
//验证码比对
Map result = new HashMap();
if (vc == null || verifyCode == null || !vc.equals(verifyCode)) {
result.put("code", "VC01");
result.put("msg", "验证码错误");
} else {
result.put("code", "0");
result.put("msg", "success");
}
return result;
}
}

浙公网安备 33010602011771号