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

2025-05-29 0 21

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

准备工作:

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

2.导入kaptcha的maven:

?

1
2

3

4

5

6
<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->

<dependency>

<groupid>com.github.penggle</groupid>

<artifactid>kaptcha</artifactid>

<version>2.3.2</version>

</dependency>

开始实验:

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

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

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

第一种方法:

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

mykaptcha.xml文件:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31
<?xml version="1.0" encoding="utf-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

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

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

<bean id="captchaproducer" class="com.google.code.kaptcha.impl.defaultkaptcha">

<property name="config">

<bean class="com.google.code.kaptcha.util.config">

<constructor-arg type="java.util.properties">

<props>

<prop key = "kaptcha.border ">yes</prop>

<prop key="kaptcha.border.color">105,179,90</prop>

<prop key="kaptcha.textproducer.font.color">blue</prop>

<prop key="kaptcha.image.width">100</prop>

<prop key="kaptcha.image.height">50</prop>

<prop key="kaptcha.textproducer.font.size">27</prop>

<prop key="kaptcha.session.key">code</prop>

<prop key="kaptcha.textproducer.char.length">4</prop>

<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>

<prop key="kaptcha.textproducer.char.string">0123456789abcefghijklmnopqrstuvwxyz</prop>

<prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.waterripple</prop>

<prop key="kaptcha.noise.color">black</prop>

<prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.defaultnoise</prop>

<prop key="kaptcha.background.clear.from">185,56,213</prop>

<prop key="kaptcha.background.clear.to">white</prop>

<prop key="kaptcha.textproducer.char.space">3</prop>

</props>

</constructor-arg>

</bean>

</property>

</bean>

</beans>

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

?

1
2

3

4

5

6

7
@springbootapplication

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

public class application {

public static void main(string[] args) {

springapplication.run(application.class, args);

}

}

在controller中使用:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
@autowired

defaultkaptcha defaultkaptcha;

......

@requestmapping("/defaultkaptcha")

public void defaultkaptcha(httpservletrequest httpservletrequest,httpservletresponse httpservletresponse) throws exception{

byte[] captchachallengeasjpeg = null;

bytearrayoutputstream jpegoutputstream = new bytearrayoutputstream();

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();

}

验证的方法:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
@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:

  1. <!doctypehtml>
  2. <html>
  3. <headlang="en">
  4. <metacharset="utf-8"/>
  5. <title>hello</title>
  6. </head>
  7. <body>
  8. <h1th:text="${info}"/>
  9. <div>
  10. <!–<imgalt="这是图片"src="/img/001.png"/>–>
  11. <imgalt="验证码"onclick="this.src='/defaultkaptcha?d='+newdate()*1"src="/defaultkaptcha"/>
  12. </div>
  13. <formaction="imgvrifycontrollerdefaultkaptcha">
  14. <inputtype="text"name="vrifycode"/>
  15. <inputtype="submit"value="提交"></input>
  16. </form>
  17. </body>
  18. </html>

启动并访问:

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

提交:

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

第二中方发:

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

kaptchaconfig.java:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25
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文件,不然会有两个相同的对象,而你没有指明要注入哪一个的话启动会失败。

启动并测试:

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

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

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

总结

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

原文链接:http://blog.csdn.net/u014104286/article/details/70515004

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 SpringBoot 集成Kaptcha实现验证码功能实例详解 https://www.kuaiidc.com/115450.html

相关文章

发表评论
暂无评论