话说现在的验证码都是拼图了,个人觉得字符输入方式比较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" onclick="this.src ='${ pageContext.request.contextPath }/user/captcha.do?'+(new Date()).getTime()"/> </div>
注意:点击验证码图片可更换验证码。