jcaptcha使用

jcaptcha使用

jcaptcha是做图片验证码的,主要说下在springboot 里面的使用方法.

pom.xml里面的配置

xml

<dependency>

<groupId>com.octo.captcha</groupId>

<artifactId>jcaptcha</artifactId>

<version>1.0</version>

</dependency>

 

两个java类

CaptchaService 处理图片

import com.octo.captcha.component.image.backgroundgenerator.GradientBackgroundGenerator;
import com.octo.captcha.component.image.color.SingleColorGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.NonLinearTextPaster;
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.engine.GenericCaptchaEngine;
import com.octo.captcha.image.gimpy.GimpyFactory;
import com.octo.captcha.service.captchastore.FastHashMapCaptchaStore;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
import com.octo.captcha.service.image.ImageCaptchaService;

import java.awt.*;


public class CaptchaService {
    private static class SingletonHolder {
        private static ImageCaptchaService imageCaptchaService = new DefaultManageableImageCaptchaService(
                new FastHashMapCaptchaStore(),
                new GenericCaptchaEngine(
                        new GimpyFactory[]{new GimpyFactory(
                                new RandomWordGenerator("123456789ABCE"),
                                new ComposedWordToImage(
                                        new RandomFontGenerator(20, 20, new Font[]{new Font("Arial", 20, 20)}),
                                        new GradientBackgroundGenerator(90, 30, new SingleColorGenerator(new Color(235, 255, 255)), new SingleColorGenerator(new Color(255, 195, 230))),
                                        new NonLinearTextPaster(4, 4, new Color(11, 11, 11))
                                )
                        )}
                ),
                180,
                180000,
                20000
        );
    }

    private CaptchaService() {
    }

    public static ImageCaptchaService getInstance() {
        return SingletonHolder.imageCaptchaService;
  }
}

CaptchaController 处理页面请求

import com.octo.captcha.service.CaptchaServiceException;
import com.smspai.sms.website.config.CaptchaService;
import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;


@Controller
@RequestMapping("/component")
public class CaptchaController {
	// slf4j logger
	private final static Logger logger = LoggerFactory.getLogger(CaptchaController.class);

	@ResponseBody
	@RequestMapping(value = "/captcha") //captcha captchaImage
	public void getJCaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
		response.setDateHeader("Expires", 0);
		response.setHeader("Cache-Control", "no-cache, must-revalidate");
		response.addHeader("Cache-Control", "post-check=0, pre-check=0");
		response.setHeader("Pragma", "no-cache");
		response.setContentType("image/jpeg");
		BufferedImage bi = CaptchaService.getInstance().getImageChallengeForID(request.getSession(true)
				.getId());
		ServletOutputStream out = response.getOutputStream();
		ImageIO.write(bi, "jpg", out);
		try {
			out.flush();
		} finally {
			out.close();
		}
		return;
	}

	//    经验:@Param("code") String code 这两个名字必须相同,都要叫code,这是绑定的
	@ResponseBody
	@RequestMapping(value = "/check", method = RequestMethod.POST) // check validate
	@ResponseStatus(HttpStatus.OK)
	public Object validate(@Param("code") String code, HttpServletRequest request) {
		ModelMap modelMap = new ModelMap();
		boolean isCaptchaCorrect = false;
		try {
			isCaptchaCorrect = CaptchaService.getInstance().validateResponseForID(request.getSession().getId(), code.toUpperCase());
//        if (isCaptchaCorrect) {
//
//        }
		} catch (CaptchaServiceException exception) {
			logger.debug(">>>>>>>[CaptchaController.validate]:\n "  + exception.getMessage());
			modelMap.addAttribute("refresh", true);
		}
		modelMap.addAttribute("success", isCaptchaCorrect);

		logger.debug(">>>>>>>[CaptchaController.validate]: \n" + code + ":" + isCaptchaCorrect);

		return modelMap;
	}
}

页面设置 及 js

<div class="field-container">
	<input  name="checkcode" type="text"  data-placeholder="验证码" placeholder="验证码"/>
	<img style="float:left;cursor: pointer;border: 1px solid #ddd;margin-left: 10px;" src="/component/captcha" id="J_captcha" title="点击刷新验证码" border="0" height="30"/>
</div>

检查验证码

$(".field[name=checkcode]").keyup(function (event) {

	var _this = $(this);
	var val = $.trim(_this.val());
	if (val.length == 4) {
		$.ajax({
			type: 'POST',
			dataType: 'json',
			url: '/component/check',
			data: {
				code: val
			},
			success: function (result) {
				if (result.success) {

					$(".ccstatus").show();
				} else if (result.refresh) {
					$("#J_captcha").click();
				} else {
					$(".ccstatus").hide();
				}
			},
			error: function () {
				$(".ccstatus").hide();
			}

		});

	} else {
		$(".ccstatus").hide();
	}

});

验证码刷新

$("#J_captcha").click(function () {
	var _this = $(this);
	var ts = new Date().getTime();
	_this.attr('src', '/component/captcha?ts=' + ts);
	$(".field[name=checkcode]").val('');
	$(".field[name=checkcode]").focus();
});
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100412.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 路由器刷机教程图解_小米路由器刷机教程[通俗易懂]

    路由器刷机教程图解_小米路由器刷机教程[通俗易懂]小米路由器刷机教程小米路由器刷机教程登陆路由器设置页面,刷新官方固件.使用路由器助手,自动检查并自动更新固件.使用u-boot模式,可刷新任何固件.小编温馨提示:你需要先在小米官网下载好相应固件到本地,再进入路由器设置,进入系统升级,选择下载好的固件进行系统升级….其他2016/06/10小米助手刷机教程小米助手刷机教程小米助手的刷机功能只能算是小米MIUI系统升级功能,如果无法开机…

    2022年7月21日
    52
  • 线程池介绍及创建线程池的4种方式是什么_程序可以创建几个线程池

    线程池介绍及创建线程池的4种方式是什么_程序可以创建几个线程池1.什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源…

    2022年10月1日
    3
  • c语言课程设计学生成绩管理系统_c语言课程设计学生信息管理系统

    c语言课程设计学生成绩管理系统_c语言课程设计学生信息管理系统《C语言学生成绩管理系统设计.doc》由会员分享,可免费在线阅读全文,更多与《C语言学生成绩管理系统设计》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、GE\nquot);rintf(quot\t%ld\tquot,stu[i]num);rintf(quot%s\tquot,stu[i]name);rintf(quot%s\tquot,stu[i]sex);rint…

    2022年9月15日
    2
  • 模拟电路与数字电路基础知识点总结

    模拟电路与数字电路基础知识点总结最近模电真的是让人头疼,模电马上就要结课了,而我的只是水平还停留在第一章第一节,总结起来就是老师讲课听不懂,我又不想听,再加上老师又不想把分给我们,所以我慌了,就再csdn上查找了一下有没有大佬对模电只是点进行过总结;世界之大,总有大佬的:废话不多说,直接上链接,赶快去膜拜:模拟电路与数字电路基础知识点总结千万不要挂科啊~!!!!!!!!!1…

    2022年6月20日
    28
  • HTML网页设计制作大作业(div+css)[通俗易懂]

    HTML网页设计制作大作业(div+css)[通俗易懂]话不多说,直接上效果图:历史介绍行政区划:地理环境著名景点:美食小吃工艺品联系我们部分项目结构老师要求的十几个页面20几张图片以及一些跳转,使用div+css布局也基本上都有了。然后代码也有注释。也能够容易看得懂部分代码偷个懒,就用notepad打开。不用H-build打开了。哈哈哈另外有同学要是需要源码的话可以联系我呀。大家加油!奥利给!……………

    2022年8月13日
    5
  • platform_driver_register( )过程追踪

    platform_driver_register( )过程追踪以下代码源于linux3.1.9。platform_driver_register()是内核中非常著名的函数。platform_driver_register()负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe()。刨去参数检查、错误处理,platform_driver_register的主要过程如下:。。。{。。。retur…

    2022年7月26日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号