java spring 验证码_patchca整合Spring MVC生成超炫的验证码

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

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

官网:

官方效果:

6895ac88392b24b5156637e6b24d7e2c.png

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

1786e6534b63f1ef94531f8b5b37ce19.png

124fc95b6d7a67452269ae63539eca1d.png

b42733222430cb6416ea3c612c01276c.png

357954898f4eb3b15b5797a98200cb72.png

b714e4db69874ba6cda34997de08a05d.png

0cd1641682c4541a33326449fb1bb312.png

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

*/

@Controller

public 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("p_w_picpath/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中无需多余配置,这样就好,相当的简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值