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>

效果:


原创粉丝点击