博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
patchca整合Spring MVC生成超炫的验证码
阅读量:7063 次
发布时间:2019-06-28

本文共 3351 字,大约阅读时间需要 11 分钟。

官方的色调单一,随机色也不随机,黑不拉几的,很难看。

为此做了扩展实现,并整合了spring mvc,生成的验证码漂亮多了。

官网:

官方效果:

下面是我整合到spring并修扩展后的效果:

package com.lavasoft.ntv.web;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.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;/** * patchca生成多彩验证码 * * @author leizhimin 14-5-5 下午11:51 */@Controllerpublic class Login2Controller {    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 {        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);        System.out.println("当前的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);    }}

Spring中无需多余配置,这样就好,相当的简单。

转载地址:http://xgjll.baihongyu.com/

你可能感兴趣的文章
Airbnb个性化搜索服务架构
查看>>
【译】Cloudera Manager(CDH)入门系列之四 (管理员控制台)
查看>>
编程常用动词细微差别
查看>>
如何通过Dataworks禁止MaxCompute 子账号跨Project访问
查看>>
聊聊reactive streams的backpressure
查看>>
android studio 2 3 的maven坑
查看>>
来分享一个我自己写的HTML模板引擎,Leopard
查看>>
基于阿里云数加构建企业级数据分析平台
查看>>
React Native安卓模拟器调出Dev Setting菜单
查看>>
Swift枚举相关值
查看>>
少走弯路,给Java 1~5 年程序员的建议
查看>>
08.Android之View事件问题
查看>>
[ JavaScript ] 数据结构与算法 —— 链表
查看>>
Java程序员幽默爆笑锦集
查看>>
小程序button引导用户授权
查看>>
机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
查看>>
我是如何设计 Upload 上传组件的
查看>>
彻底搞懂浏览器Event-loop
查看>>
java2019面试题北京
查看>>
Promise面试题2实现异步串行执行
查看>>