java-captcha实现验证码(二)
来源:互联网 发布:microsoftoutlook mac 编辑:程序博客网 时间:2024/05/22 06:27
captcha实现验证码验证用户登录,防止密码被暴力破解。
下面是在Springmvc框架中运行。
友情链接:(实现验证码和二维码)http://www.blogjava.net/fancydeepin/archive/2015/10/12/416484.html#427696
导入的jar包:
kaptcha-2.3.2.jar
下载地址:http://download.csdn.net/detail/u013147600/9052871
或是在maven ---pom.xml:配置如下
<!-- 验证码工具 -->
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
Web.xml的配置
<span style="font-size:14px;"><!-- 验证码Servlet --> <servlet> <servlet-name>kaptcha</servlet-name> <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>kaptcha</servlet-name> <url-pattern>/kaptcha.jpg</url-pattern> </servlet-mapping></span>
springmvc.xml 配置
(captchaProducer相当于一个类,用户而已根据自己的要求对其属性进行修改)
<span style="font-size:14px;"><!-- captcha一些属性的配置 --><bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> <property name="config"> <bean class="com.google.code.kaptcha.util.Config"> <constructor-arg> <props> <prop key="kaptcha.border">yes</prop> <prop key="kaptcha.border.color">105,179,90</prop> <prop key="kaptcha.textproducer.font.color">blue</prop> <prop key="kaptcha.image.width">125</prop> <prop key="kaptcha.image.height">45</prop> <prop key="kaptcha.textproducer.font.size">45</prop> <prop key="kaptcha.session.key">code</prop> <prop key="kaptcha.textproducer.char.length">4</prop> <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop> </props> </constructor-arg> </bean> </property> </bean></span>
SpringUtils.java 解析类
(用于解析springmvc.xml中的bean)
<span style="font-size:14px;">package com.authc.utils;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @author lyx * * 2015-8-18下午3:53:19 * *com.utils.SpringUtil *TODO */public class SpringUtil {private static ApplicationContext ctx =new ClassPathXmlApplicationContext("springmvc.xml");public static Object getBean(String beanId){return ctx.getBean(beanId);}}</span>
UserController控制层类
<span style="font-size:14px;">@Controller@RequestMapping("/member")public class UserController { private Producer captchaProducer; @RequestMapping(value = "captcha-image") public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(); //获取springmvc.xml中的captchaProducer Bean captchaProducer = (Producer) SpringUtil.getBean("captchaProducer"); String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY); System.out.println("系统生成的验证码: " + code ); response.setDateHeader("Expires", 0); response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); response.addHeader("Cache-Control", "post-check=0, pre-check=0"); response.setHeader("Pragma", "no-cache"); response.setContentType("image/jpeg"); String capText = captchaProducer.createText(); //将系统生成的验证码放入Session中 session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText); BufferedImage bi = captchaProducer.createImage(capText); ServletOutputStream out = response.getOutputStream(); ImageIO.write(bi, "jpg", out); try { out.flush(); } finally { out.close(); } return null; } @RequestMapping("/checkCode")public String checkCode(HttpServletRequest request){//获取用户输入的验证码String submitCode = WebUtils.getCleanParam(request,"j_code");//从session中获取系统生成的验证码String kaptchaExpected = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); System.out.println("用户输入的验证码是:"+submitCode+",系统生成的验证码:"+kaptchaExpected);//进行比较if(StringUtils.isEmpty(submitCode) || StringUtils.equalsIgnoreCase(submitCode, kaptchaExpected)){request.setAttribute("checkCode","验证码正确!");}else{request.setAttribute("checkCode","验证码错误!");}return "/kaptcha";}}</span>注:这里是在Controller中进行验证,比较合适的方法应该是在js里面对用户输入的验证码进行验证
kaptcha.jsp页面
<span style="font-size:14px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page isELIgnored="false"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>验证码</title> <script type="text/javascript" src="<%=request.getContextPath()%>/res/js/jquery-1.11.3.min.js"> </script></head> <body> <script type="text/javascript"> $(function(){ //生成验证码 $('#kaptchaImage').click(function () { $(this).hide().attr('src', '<%=path%>/member/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn(); }); }); window.onbeforeunload = function(){ //关闭窗口时自动退出 if(event.clientX>360&&event.clientY<0||event.altKey){ alert(parent.document.location); } }; function changeCode() { //刷新 $('#kaptchaImage').hide().attr('src', '<%=path%>/member/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn(); event.cancelBubble=true; } </script> <div class="form-group"> <label>验证码 </label> <form action="<%=path%>/member/checkCode"> <input name="j_code" type="text" id="kaptcha" maxlength="4" class="form-control" /> <br/> <img src="<%=path%>/member/captcha-image" id="kaptchaImage" style="margin-bottom: -3px"/> <a href="#" onclick="changeCode()">看不清?换一张</a> <input type="submit" value="验证"> <span>${checkCode }</span> </form></div> </body></html></span>
kaptcha可配置项:
kaptcha.border 是否有边框 默认为true 我们可以自己设置yes,nokaptcha.border.color 边框颜色 默认为Color.BLACKkaptcha.border.thickness 边框粗细度 默认为1kaptcha.producer.impl 验证码生成器 默认为DefaultKaptchakaptcha.textproducer.impl 验证码文本生成器 默认为DefaultTextCreatorkaptcha.textproducer.char.string 验证码文本字符内容范围 默认为abcde2345678gfynmnpwxkaptcha.textproducer.char.length 验证码文本字符长度 默认为5kaptcha.textproducer.font.names 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)kaptcha.textproducer.font.size 验证码文本字符大小 默认为40kaptcha.textproducer.font.color 验证码文本字符颜色 默认为Color.BLACKkaptcha.textproducer.char.space 验证码文本字符间距 默认为2kaptcha.noise.impl 验证码噪点生成对象 默认为DefaultNoisekaptcha.noise.color 验证码噪点颜色 默认为Color.BLACKkaptcha.obscurificator.impl 验证码样式引擎 默认为WaterRipplekaptcha.word.impl 验证码文本字符渲染 默认为DefaultWordRendererkaptcha.background.impl 验证码背景生成器 默认为DefaultBackgroundkaptcha.background.clear.from 验证码背景颜色渐进 默认为Color.LIGHT_GRAYkaptcha.background.clear.to 验证码背景颜色渐进 默认为Color.WHITEkaptcha.image.width 验证码图片宽度 默认为200kaptcha.image.height 验证码图片高度 默认为50
简单的效果图:
参考:http://blog.csdn.net/rambo_china/article/details/7720181
http://cuisuqiang.iteye.com/blog/2048428
0 0
- java-captcha实现验证码(二)
- java-captcha实现验证码
- 验证码(CAPTCHA)
- 验证码captcha用C语言实现
- Java利用captcha实验图片验证码
- Yii 验证码(captcha)的使用
- 用PHP编写CAPTCHA(验证码)
- django 验证码(django-simple-captcha)
- captcha验证码入门
- 验证码 Captcha
- Spring Mvc Captcha验证码实现(附Servlet实现方式)
- Cakephp中使用Captcha实现更加安全的验证码
- 用Rails Captcha插件,轻松实现验证码
- Spring MVC Captcha 验证码 (附Servlet实现方式)
- Laravel5 验证码Captcha 扩展
- django验证码框架(django-simple-captcha)
- 关于Yii 验证码(captcha)的一些…
- 15分钟实战机器学习:验证码(CAPTCHA)识别
- python中 import gevent报错:libevent version mismatch
- Unity鼠标自由查看3D物体之直接旋转物体
- 重点和三本谈理想、大城市和小城市谈中国梦
- var_dump() 函数调试显示(输出深度,字符串字数)设置
- POJ 2478 Farey Sequence(欧拉函数)
- java-captcha实现验证码(二)
- oracle数据库解决查询值为null的情况
- Libvirt错误总结
- 初步了解OPENWRT
- StrangeIoc框架的详细介绍
- C# WPF回显
- kafka无法发送消息问题处理
- ubuntu下出现su: Authentication failture
- QQ、QQ空间、微信好友、微信朋友圈、新浪微博的分享。