话说现在的验证码都是拼图了,个人觉得字符输入方式比较low,此方法仅供公司招不起前端的后端猿应急之用,本篇为同步校验,后续会更新Ajax异步校验方法。本校验码用于注册页面,也可放在登录页面,实现方法大同小异。
1、Controller相关代码
@RequestMapping("/captcha")
public void createCaptcha(HttpSession session,HttpServletResponse response) throws Exception{
// 生成验证码随机数
String securityCode = ValidationCode.getSecurityCode();
// 将随机数存入session
session.setAttribute("code", securityCode);
// 生成验证码图片
BufferedImage image = ValidationCode.createImage(securityCode);
// 将验证码图片响应到客户端
ImageIO.write(image, "png", response.getOutputStream());
}
@RequestMapping("/register")
public String register(User user,HttpSession session,String clientCode){
String code = (String) session.getAttribute("code");
if(code.equalsIgnoreCase(clientCode)){
us.register(user);
String realname = us.queryRealname(user);
session.setAttribute("realname", realname);
session.setAttribute("flag", "ok");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(date.getTime());
session.setAttribute("date", time);
return "redirect:/stu/queryAll.do";
}
return "user/register";
}
2、页面部分相关代码
<div style="font-size: 18px;font-family:黑体;">验证码:</div>
<div class="control-group">
<input type="text" name="clientCode" /><img src="${ pageContext.request.contextPath }/user/captcha.do"
οnclick="this.src ='${ pageContext.request.contextPath }/user/captcha.do?'+(new Date()).getTime()"/>
</div>
注意:点击验证码图片可更换验证码。