springmvc简单验证码实现

验证码经常用于登录或注册的场合,可以有效防止恶意注册。以前一直觉得实现验证码挺难的,可是自从知道了ValidateCode.jar这个工具包之后,实现验证码就变得超级简单了。

不多说,首先在eclipse中新建一个web项目,导入ValidateCode.jar

写两个servlet,一个用于生成验证码,另一个用于验证码的正确性验证。还需要一个表单页面显示生成的验证码,点击验证码图片还能实现验证码的切换。因为我自己写的小项目使用了springmvc,这里为了方便就把相应的处理方法单独称作相应的servlet,其实都差不多的。

 

先说说表单页面吧:

<form action="${pageContext.request.contextPath}/login" method="post">

<label>用户名:label> <input type="text" name="username"/><br/>

<label>密码:label> <input type="password" name="password"/><br/>

<label>验证码:label><input type="text" name="checkcode"/><img id="code" src="${pageContext.request.contextPath}/code"/><br/>

 <input type="submit" value="提交"/> <input type="reset" value="重置">

form>

 

表单信息输入完之后提交的路径是xxx/loginimg图片标签中的src属性就是生成验证码的路径xxx/code

<script type="text/javascript">

  $(function(){

 $("#code").click(function(){

 $(this).attr("src","${pageContext.request.contextPath}/code?time="+new Date());

 });

 }) 

script>

点击验证码图片实现验证码切换,主要途径就是改变src的属性值,加上时间戳去请求生成验证码的servlet,这样每次点击图片的请求都不一样,也就能产生不同的验证码。这里使用了jQuery,给验证码图片绑定了单击事件,每次去点击图片的时候就重新请求生成验证码的servlet产生新的验证码。

 

现在来看看具体生成验证码的servlet,对应的访问路径就是上边提到的xxx/code

/**

 * 生成验证码

 */

@RequestMapping(value = "/code", method = RequestMethod.GET)

public void genarateCode(HttpServletRequest request,HttpServletResponse response) throws Exception {

ValidateCode validateCode = new ValidateCode(180, 40, 4, 80);

String code = validateCode.getCode();//得到验证码的具体字符

System.out.println(code);

request.getSession().setAttribute("code", code);// 将验证码字符存到session中

response.setContentType("image/jpeg"); //设置响应类型为图片

 

validateCode.write(response.getOutputStream());// 将生成的验证码写到页面中

}

可以看到,主要操作就是:

1.定义生成验证码的长、宽、字符数、干扰线条数;

2.将生成的验证码字符存到session域中,以便于在登录的servlet中取出与用户输入的验证码进行对比;

3.将生成的验证码写到表单页面中进行显示。

 

 

登录处理的servlet,对应访问路径为xxx/login

/**

 * 登录

 */

@RequestMapping(value = "/login", method = RequestMethod.POST)

public void login(User user, String checkcode,Model model, HttpServletRequest request,

HttpServletResponse response) throws Exception {

long startTime = System.currentTimeMillis(); // 开始时间

log.info("登录提交....");

String code = (String) request.getSession().getAttribute("code");// 得到session中的正确验证码

boolean flag = userService.login(user);

if (flag && checkcode != null && code != null && checkcode.equalsIgnoreCase(code)) { // 登录验证成功

request.getSession().setAttribute("loginUser", user);

response.sendRedirect(request.getContextPath() + "/stu/listPage/1");

long endTime = System.currentTimeMillis(); // 结束时间

log.info("登录验证通过...登录验证用时为:" + (endTime - startTime));

else {// 登录验证失败

request.getSession().setAttribute("error""登录出错,请检查登录信息是否正确!");

request.getRequestDispatcher("/error.jsp").forward(request,

response); // 转到出错页面

}

}

在该servlet中,主要操作就是从session域中取出正确的验证码,和用户通过表单提交的验证码进行对比,如果相等则验证通过,跳转到后续处理页面;如果不相等,则跳转到出错页面提示相应的错误信息。

可以看出,整个处理逻辑都很简单,使用ValidateCode工具包可以让我们非常便利的进行验证码开发,因为该工具包进行了高度封装,所以我们只需要调用相应的方法就OK了,简单省事儿。

 

源码链接:

http://download.csdn.net/detail/u012807344/9214343

你可能感兴趣的:(springmvc)