Java验证码 patchca

Java验证码 patchca

maven依赖

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath />
	</parent>
	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<springboot.version>2.1.3.RELEASE</springboot.version>
	</properties>
	
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-freemarker</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.bingoohuang</groupId>
			<artifactId>patchca</artifactId>
			<version>0.0.1</version>
		</dependency>

工具类

/**
 * 验证码工具类
 * 
 * @author zhengzc
 * @date 2019-08-01
 */
public class CaptchaUtil {

	public static ConfigurableCaptchaService getConfigurableCaptchaService() {
		ConfigurableCaptchaService cs = new ConfigurableCaptchaService();
		RandomWordFactory wf = new RandomWordFactory();
		wf.setCharacters("23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ");
		wf.setMaxLength(4);
		wf.setMinLength(4);
		cs.setWordFactory(wf);
		return cs;
	}

	/**
	 * 选择验证码生成工厂
	 * 
	 * @param cs
	 * @param index
	 */
	public static void setFactory(ConfigurableCaptchaService cs, int index) {
		System.err.println("工厂序号:" + index);
		if (index == 0) {
			// 弧线波纹
			cs.setFilterFactory(new CurvesRippleFilterFactory(cs.getColorFactory()));
		} else if (index == 1) {
			// 大理石波纹
			cs.setFilterFactory(new MarbleRippleFilterFactory());
		} else if (index == 2) {
			// 大理石波纹
			cs.setFilterFactory(new DoubleRippleFilterFactory());
		} else if (index == 3) {
			// 摇摆波纹
			cs.setFilterFactory(new WobbleRippleFilterFactory());
		} else if (index == 4) {
			// 扩散的波纹
			cs.setFilterFactory(new DiffuseRippleFilterFactory());
		}
	}

	/**
	 * 选择验证码生成工厂
	 * 
	 * @param cs
	 * @param index
	 */
	public static void setColorFactory(ConfigurableCaptchaService cs, int index) {
		System.err.println("颜色序号:" + index);
		if (index == 0) {
			// 自定义颜色
			cs.setColorFactory(getColorFactory());
		} else if (index == 1) {
			// 梯度变化颜色
			cs.setColorFactory(new GradientColorFactory());
		} else if (index == 2) {
			// 随机颜色
			cs.setColorFactory(new RandomColorFactory());
		} else if (index == 3) {
			// 单一颜色
			cs.setColorFactory(new SingleColorFactory());
		}
	}

	/**
	 * 自定义颜色工厂
	 * 
	 * @return
	 */
	private static ColorFactory getColorFactory() {
		return new ColorFactory() {
			@Override
			public Color getColor(int x) {
				Random random = new Random();
				int[] c = {25, 60, 170};
				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]);
			}
		};
	}
}
/**
 * 使用谷歌提供的验证码组件patchca来生成验证码
 * 
 * @author zhengzc
 * @date 2019-08-01
 */
@Controller
@RequestMapping("/patchca")
public class CaptchaController {
	@RequestMapping(value = "/getpatchcaImage")
	public void getpatchcaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ConfigurableCaptchaService cs = CaptchaUtil.getConfigurableCaptchaService();
		CaptchaUtil.setFactory(cs, new Random().nextInt(5));
		CaptchaUtil.setColorFactory(cs, new Random().nextInt(4));
		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/jpeg");
		response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		response.setHeader("Pragma", "no-cache");
		long time = System.currentTimeMillis();
		response.setDateHeader("Last-Modified", time);
		response.setDateHeader("Date", time);
		response.setDateHeader("Expires", time);
	}
}

访问效果

http://localhost:8080/patchca/getpatchcaImage

  • [0,1]在这里插入图片描述

  • [0,3]在这里插入图片描述

  • [1,2]在这里插入图片描述

  • [1,3]在这里插入图片描述

  • [2,1] 在这里插入图片描述

  • [2,3]在这里插入图片描述

  • [3,0]在这里插入图片描述

  • [3,1]在这里插入图片描述

  • [4,0]在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个Java验证码登录的示例代码: ```java // 生成验证码 String verifyCode = VerifyCodeUtils.generateVerifyCode(4); // 将验证码存入session request.getSession().setAttribute("verifyCode", verifyCode); // 生成验证码图片 response.setContentType("image/png"); BufferedImage image = VerifyCodeUtils.getImage(verifyCode, 100, 40); ImageIO.write(image, "png", response.getOutputStream()); ``` 上述代码中,`VerifyCodeUtils`是一个自定义的工具类,用于生成验证码验证码图片。在生成验证码时,我们将验证码存入session中,以便后续验证。在生成验证码图片时,我们设置了图片的类型为PNG,并将图片输出到response的输出流中,以便前端页面显示。 接下来是一个验证码登录的示例代码: ```java // 获取用户输入的验证码 String userInputVerifyCode = request.getParameter("verifyCode");// 获取session中存储的验证码 String sessionVerifyCode = (String) request.getSession().getAttribute("verifyCode"); // 验证码校验 if (userInputVerifyCode == null || !userInputVerifyCode.equalsIgnoreCase(sessionVerifyCode)) { // 验证码错误 return "verifyCodeError"; } else { // 验证码正确,进行登录操作 // ... } ``` 上述代码中,我们首先获取用户输入的验证码和session中存储的验证码,然后进行验证码校验。如果验证码校验失败,我们返回一个错误页面;如果验证码校验成功,我们进行登录操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_26264237

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值