SpringBoot 集成Kaptcha实现验证码功能实例详解

网友投稿 258 2023-04-19


SpringBoot 集成Kaptcha实现验证码功能实例详解

在一个web应用中验证码是一个常见的元素。不管是防止机器人还是爬虫都有一定的作用,我们是自己编写生产验证码的工具类,也可以使用一些比较方便的验证码工具。在网上收集一些资料之后,今天给大家介绍一下kaptcha的和springboot一起使用的简单例子。

准备工作:

1.你要有一个springboot的hello world的工程,并能正常运行。

2.导入kaptcha的maven:

com.github.penggle

kaptcha

2.3.2

开始实验:

我们有两种方式在springboot中使用kaptcha

第一种使用.xml的配置方式配置生成kaptcha的bean对象,在启动类上@ImportResource这个xml文件;在controller中注入其对象并使用

第二种是把kaptcha作为工程的一个类,加上@component注解在返回kaptcha的方法中加上@Bean注解,再在controller中注入其对象。

第一种方法:

在resources中创建一个xxx.xml文件 如:

mykaptcha.xml文件:

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd">

<bean class="com.google.code.kaptlDYGDhyILcha.util.Config">

yes

105,179,90

blue

100

50

27

code

4

宋体,楷体,微软雅黑

0123456789ABCEFGHIJKLMNOPQRSTUVWXYZ

com.google.code.kaptcha.impl.WaterRipple

black

com.google.code.kaptcha.impl.DefaultNoise

185,56,213

white

3

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd">

<bean class="com.google.code.kaptlDYGDhyILcha.util.Config">

yes

105,179,90

blue

100

50

27

code

4

宋体,楷体,微软雅黑

0123456789ABCEFGHIJKLMNOPQRSTUVWXYZ

com.google.code.kaptcha.impl.WaterRipple

black

com.google.code.kaptcha.impl.DefaultNoise

185,56,213

white

3

在springboot启动类上引入这个文件

@SpringBootApplication

@ImportResource(locations={"classpath:mykaptcha.xml"})

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

在controller中使用:

@Autowired

DefaultKaptcha defaultKaptcha;

......

@RequestMapping("/defaultKaptcha")

public void defaultKaptcha(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) throws Exception{

byte[] captchaChallengeAsJpeg = null;

ByteArrayOutputStream jpegOutputStream = new ByteAhttp://rrayOutputStream();

try {

//生产验证码字符串并保存到session中

String createText = defaultKaptcha.createText();

httpServletRequest.getSession().setAttribute("vrifyCode", createText);

//使用生产的验证码字符串返回一个BufferedImage对象并转为byte写入到byte数组中

BufferedImage challenge = defaultKaptcha.createImage(createText);

ImageIO.write(challenge, "jpg", jpegOutputStream);

} catch (IllegalArgumentException e) {

httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);

return;

}

//定义response输出类型为image/jpeg类型,使用response输出流输出图片的byte数组

captchaChallengeAsJpeg = jpegOutputStream.toByteArray();

httpServletResponse.setHeader("Cache-Control", "no-store");

httpServletResponse.setHeader("Pragma", "no-cache");

httpServletResponse.setDateHeader("Expires", 0);

httpServletResponse.setContentType("image/jpeg");

ServletOutputStream responseOutputStream =

httpServletResponse.getOutputStream();

responseOutputStream.write(captchaChallengeAsJpeg);

responseOutputStream.flush();

responseOutputStream.close();

}

验证的方法:

@RequestMapping("/imgvrifyControllerDefaultKaptcha")

public ModelAndView imgvrifyControllerDefaultKaptcha(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse){

ModelAndView andView = new ModelAndView();

String captchaId = (String) httpServletRequest.getSession().getAttribute("vrifyCode");

String parameter = httpServletRequest.getParameter("vrifyCode");

System.out.println("Session vrifyCode "+captchaId+" form vrifyCode "+parameter);

if (!captchaId.equals(parameter)) {

andView.addObject("info", "错误的验证码");

andView.setViewName("index");

} else {

andView.addObject("info", "登录成功");

andView.setViewName("succeed");

}

return andView;

}

模板html:

验证码

启动并访问:

提交:

第二中方发:

这种方法把.xml文件换成使用代码来配置:

KaptchaConfig.Java:

import java.util.Properties;

import org.springframework.context.annotation.Bean;

import org.springframework.stereotype.Component;

import com.google.code.kaptcha.impl.DefaultKaptcha;

import com.google.code.kaptcha.util.Config;

@Component

public class KaptchaConfig {

@Bean

public DefaultKaptcha getDefaultKaptcha(){

com.google.code.kaptcha.impl.DefaultKaptcha defaultKaptcha = new com.google.code.kaptcha.impl.DefaultKaptcha();

Properties properties = new Properties();

properties.setProperty("kaptcha.border", "yes");

properties.setProperty("kaptcha.border.color", "105,179,90");

properties.setProperty("kaptcha.textproducer.font.color", "blue");

properties.setProperty("kaptcha.image.width", "110");

properties.setProperty("kaptcha.image.height", "40");

properties.setProperty("kaptcha.textproducer.font.size", "30");

properties.setProperty("kaptcha.session.key", "code");

properties.setProperty("kaptcha.textproducer.char.length", "4");

properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");

Config config = new Config(properties);

defaultKaptcha.setConfig(config);

return defaultKaptcha;

}

}

注意要去掉启动类中引入的.xml文件,不然会有两个相同的对象,而你没有指明要注入哪一个的话启动会失败。

启动并测试:

到这里就算成功了。(也有使用jcaptcha的,只是他们最好不要再一个工程中使用,使用到了相同的类,有时候会导致异常。)

补充:对于kaptcha的配置属性大家可以找找,根据属性就可以配置了。

总结

以上所述是给大家介绍的SpringBoot 集成Kaptcha实现验证码功能实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序删除处理详解
下一篇:微信分享接口测试(jssdk微信分享接口是什么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~