Java利用captcha实验图片验证码
来源:互联网 发布:php 做数据统计图 编辑:程序博客网 时间:2024/05/29 15:25
Java利用captcha实验图片验证码
下载jar包patchca-0.5.0.jar
引入到项目中
获取验证码图片类
package com.wamei.controller.jcaptcha;import org.apache.log4j.Logger;import org.patchca.color.ColorFactory;import org.patchca.filter.predefined.*;import org.patchca.service.ConfigurableCaptchaService;import org.patchca.utils.encoder.EncoderHelper;import org.patchca.word.RandomWordFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.ServletRequestUtils;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.awt.*;import java.io.IOException;import java.util.Random;/** * Created by qixuan.chen on 2017/5/18. */@Controller@RequestMapping("/captcha")public class JcaptchaImageCreater { private final static Logger logger = Logger.getLogger(JcaptchaImageCreater.class); private static ConfigurableCaptchaService cs = new ConfigurableCaptchaService(); private static Random random = new Random(); static {// cs.setColorFactory(new SingleColorFactory(new Color(25, 60, 170))); cs.setColorFactory(new ColorFactory() { @Override public Color getColor(int x) { int[] c = new int[3]; int i = random.nextInt(c.length); for (int fi = 0; fi < c.length; fi++) { if (fi == i) { c[fi] = random.nextInt(71); } else { c[fi] = random.nextInt(256); } } return new Color(c[0], c[1], c[2]); } }); RandomWordFactory wf = new RandomWordFactory(); wf.setCharacters("23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ"); wf.setMaxLength(4); wf.setMinLength(4); cs.setWordFactory(wf); } @RequestMapping("/pcrimg") public void crimg(HttpServletRequest request, HttpServletResponse response) throws IOException { Integer number = ServletRequestUtils.getIntParameter(request, "number", 4); Integer width = ServletRequestUtils.getIntParameter(request, "width", 200); Integer height = ServletRequestUtils.getIntParameter(request, "height", 60); cs.setHeight(height); cs.setWidth(width); RandomWordFactory rwf = new RandomWordFactory(); rwf.setMinLength(number); rwf.setMaxLength(number); cs.setWordFactory(rwf); switch (random.nextInt(5)) { case 0: cs.setFilterFactory(new CurvesRippleFilterFactory(cs.getColorFactory())); break; case 1: cs.setFilterFactory(new MarbleRippleFilterFactory()); break; case 2: cs.setFilterFactory(new DoubleRippleFilterFactory()); break; case 3: cs.setFilterFactory(new WobbleRippleFilterFactory()); break; case 4: cs.setFilterFactory(new DiffuseRippleFilterFactory()); break; } HttpSession session = request.getSession(false); if (session == null) { session = request.getSession(); } setResponseHeaders(response); String token = EncoderHelper.getChallangeAndWriteImage(cs, "png", response.getOutputStream()); session.setAttribute("captchaToken", token); logger.info("当前的SessionID=" + session.getId() + ",验证码=" + token); } protected void setResponseHeaders(HttpServletResponse response) { response.setContentType("image/png"); response.setHeader("Cache-Control", "no-cache, no-store"); response.setHeader("Pragma", "no-cache"); long time = System.currentTimeMillis(); response.setDateHeader("Last-Modified", time); response.setDateHeader("Date", time); response.setDateHeader("Expires", time); }}
页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html class="login-bg"><head><title>登录</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <!-- bootstrap --> <link href="../css/bootstrap/bootstrap.css" rel="stylesheet" /> <link href="../css/bootstrap/bootstrap-responsive.css" rel="stylesheet" /> <link href="../css/bootstrap/bootstrap-overrides.css" type="text/css" rel="stylesheet" /> <!-- global styles --> <link rel="stylesheet" type="text/css" href="../css/layout.css" /> <link rel="stylesheet" type="text/css" href="../css/elements.css" /> <link rel="stylesheet" type="text/css" href="../css/icons.css" /> <!-- libraries --> <link rel="stylesheet" type="text/css" href="../css/lib/font-awesome.css" /> <!-- this page specific styles --> <link rel="stylesheet" href="../css/compiled/signin.css" type="text/css" media="screen" /> <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <style type="text/css"> body{ background:url(../img/bgs/landscape.jpg); filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale')"; -moz-background-size:100% 100%; background-size:100% 100%; } </style><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body> <div class="row-fluid login-wrapper"> <a href="index.jsp"> <img class="logo" src="../img/logo.png" /> </a> <div class="span4 box"> <div class="content-wrap"> <h6>用户登录</h6> <input class="span12" type="text" placeholder="登录名/邮箱" id="loginId" value=""/> <input class="span12" type="password" placeholder="请输入您的密码" id="password" value=""/> <input class="span12" type="text" placeholder="请输入验证码" id="validateCode" value=""/> <img id="valiImg" src="/wamei/captcha/pcrimg.htm?width=200&height=50" onclick="changeValiImg(this);" style="margin-left: -21px;" /> <a onclick="changeValiImg(this);">看不清,换一张!</a> <!-- 忘记密码 <a href="forgetPwd.jsp" class="forgot">忘记密码?</a> --> <div class="remember"> <!-- <input id="remember-me" type="checkbox" /> <label for="remember-me">记住我</label> --> </div> <a class="btn-glow primary login" href="javascript:void(0);" onclick="login()">登录</a> </div> </div> <div class="span4 no-account"> <!-- <p>还没有帐号?</p> <a href="register.jsp">马上注册</a> --> </div> </div><!-- scripts --> <script src="../js/jquery.min.js"></script> <script src="../js/bootstrap.min.js"></script> <script src="../js/theme.js"></script> <!-- pre load bg imgs --> <script type="text/javascript"> $(function () { // 判断是否跳到iframe中打开登录页面 var parentIframe = $('#mainFrame', parent.document); if(parentIframe && parentIframe.attr("src")){ parent.window.location.href = "login.jsp"; } // bg switcher var $btns = $(".bg-switch .bg"); $btns.click(function (e) { e.preventDefault(); $btns.removeClass("active"); $(this).addClass("active"); var bg = $(this).data("img"); $("html").css("background-image", "url('../img/bgs/" + bg + "')"); }); $(".content-wrap input").keydown(function (e) { if (e.keyCode == 13) { login(); } }); }); function login(){ var loginId = $("#loginId").val(); var pwd = $("#password").val(); var valiCode = $("#validateCode").val(); if(!loginId || !pwd ){ alert("请输入登录信息"); return false; } $.ajax({ url:"/wamei/loginController/login.htm", data: {"loginId":loginId,"password":pwd,"validateCode":valiCode}, async:false, success: function($data){ var data = eval("("+$data+")"); if(data.statusCode == 1){ window.location.href = "../index.jsp"; }else{ alert(data.msg); } } }); } function changeValiImg(obj){ var srcurl = $("#valiImg").attr("src"); $('#valiImg').attr('src',srcurl +'&d='+new Date().getTime()); } </script></body></html>
效果:
阅读全文
1 0
- Java利用captcha实验图片验证码
- java-captcha实现验证码
- 利用keras破解captcha验证码
- laravel 图片验证码 mews/captcha
- java-captcha实现验证码(二)
- 用Captcha进行图片验证
- 验证码(CAPTCHA)
- captcha验证码入门
- 验证码 Captcha
- springmvc使用谷歌captcha生成图片验证码
- laravel使用mews/captcha图片验证码解决方案
- Laravel5 验证码Captcha 扩展
- laravel 图像验证码 Gregwar\\Captcha 和 mews/captcha
- ecshop ajax请求验证captcha(验证码)
- spring MVC中引入captcha的插件生成图片验证码
- 使用BotDetect Captcha在SpringMCV项目中生成验证码图片
- 在spring MVC中引入captcha的插件生成图片验证码
- Go实战--golang中使用图片和验证码(dchest/captcha)
- Asp.net项目常用的控件
- JpGraph使用详解
- react native SegmentedControlIOS 使用详解
- Oracle高级查询实例,提升效率
- 2017GMTC全球移动技术大会专题介绍
- Java利用captcha实验图片验证码
- Linux shell编程
- Python中使用libsvm
- ios weak
- 重新排序一个序列
- ViewPager详解(二)广告轮播图
- MyEclipse常用快捷键
- Android EditText响应drawableRight等的点击事件
- Android 启动方式 显示启动