目录
- 一、CaptchaUtil代码展示
- [二、CaptchaController 代码展示](#二、CaptchaController 代码展示)
一、CaptchaUtil代码展示
java
package com.minster.yanapi.utils;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class CaptchaUtil{
@Bean
public DefaultKaptcha getDefaultKaptcha() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
properties.setProperty("kaptcha.border", "yes");
properties.setProperty("kaptcha.border.color", "105,179,90");
properties.setProperty("kaptcha.border.thickness","1");
properties.setProperty("kaptcha.session.key", "code");
properties.setProperty("kaptcha.textproducer.font.color", "blue");
properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅 黑");
properties.setProperty("kaptcha.textproducer.font.size", "30");
properties.setProperty("kaptcha.textproducer.char.length", "4");
properties.setProperty("kaptcha.textproducer.char.space", "4");
properties.setProperty("kaptcha.image.width", "100");
properties.setProperty("kaptcha.image.height", "40");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
这段代码是一个基于Spring框架的验证码配置类,主要用于配置验证码生成器的属性和参数。
-
@Configuration
注解标识这是一个配置类,用于定义 Spring Bean。 -
CaptchaUtil
类定义了一个名为getDefaultKaptcha
的方法,该方法使用@Bean
注解,表示它会被Spring容器管理,并作为一个Bean提供。 -
在
getDefaultKaptcha
方法中,创建了DefaultKaptcha
类的实例,这是一个基于Google Kaptcha库的验证码生成器。 -
通过
Properties
对象配置验证码生成器的各种属性。以下是一些主要的配置项:kaptcha.border
: 是否有边框,这里设置为 "yes"。kaptcha.border.color
: 边框颜色,这里设置为 "105,179,90"。kaptcha.session.key
: 存储验证码的 session key,这里设置为 "code"。kaptcha.textproducer.font.color
: 验证码文本字符颜色,这里设置为 "blue"。kaptcha.textproducer.font.names
: 字体样式,这里设置为 "宋体,楷体,微软雅黑"。kaptcha.textproducer.font.size
: 字体大小,这里设置为 "30"。kaptcha.textproducer.char.length
: 验证码字符长度,这里设置为 "4"。kaptcha.textproducer.char.space
: 字符间距,这里设置为 "4"。kaptcha.image.width
: 验证码图片宽度,这里设置为 "100"。kaptcha.image.height
: 验证码图片高度,这里设置为 "40"。
-
创建一个
Config
对象,并将之前配置的Properties
对象传递给它,用于构建验证码生成器的配置。 -
将配置好的
Config
对象设置到DefaultKaptcha
实例中。 -
最后,返回配置好的
DefaultKaptcha
实例。
总体来说,这个配置类的作用是创建和配置一个用于生成验证码的 DefaultKaptcha
Bean,并通过Spring容器进行管理。该验证码生成器的外观和行为由一系列属性值定义,这些属性值可以在配置中进行调整,以满足具体的需求。
二、CaptchaController 代码展示
java
@RestController
@RequestMapping("/code")
public class CaptchaController {
@Autowired
private DefaultKaptcha defaultKaptcha;
@GetMapping( "/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response){
//定义response输出类型为image/jpeg
response.setDateHeader("Expires",0);
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setContentType("image/jpeg");
//---------------------------生成验证码----------------------
//获取验证码文本内容
String text = defaultKaptcha.createText();
System.out.println("验证码: " + text);
//将验证码放到session中
request.getSession().setAttribute("captcha",text);
//根据文本内容创建图形验证码
BufferedImage image = defaultKaptcha.createImage(text);
ServletOutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
//输出流输出图片,格式为jpg
ImageIO.write(image,"jpg",outputStream);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (outputStream != null){
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上述代码是一个基于Spring框架的Java类,使用@RestController注解标识为一个RESTful风格的控制器,处理与验证码相关的HTTP请求。以下是对代码的详细分析:
-
类注解:
@RestController
: 表示这是一个控制器类,并且所有方法都以JSON格式返回响应。
-
类声明:
@RequestMapping("/code")
: 定义了类级别的请求映射,表示处理所有以"/code"开头的请求。
-
字段注入:
private DefaultKaptcha defaultKaptcha
: 使用@Autowired注解进行依赖注入,注入了一个名为defaultKaptcha
的DefaultKaptcha类型的Bean。
-
方法定义:
@GetMapping("/captcha")
: 处理HTTP GET请求,映射路径为"/code/captcha"。public void captcha(HttpServletRequest request, HttpServletResponse response)
: 处理验证码请求的方法,接受HttpServletRequest和HttpServletResponse作为参数。
-
验证码生成与输出:
- 设置响应头,禁用缓存,确保验证码每次都是新的。
- 获取验证码文本内容:
String text = defaultKaptcha.createText();
- 将验证码文本放入Session中:
request.getSession().setAttribute("captcha", text);
- 创建图形验证码:
BufferedImage image = defaultKaptcha.createImage(text);
- 获取输出流:
ServletOutputStream outputStream = response.getOutputStream();
- 将验证码图片以JPEG格式写入输出流:
ImageIO.write(image, "jpg", outputStream);
- 关闭输出流。
-
异常处理:
- 在输出流操作中使用了try-catch块捕获IOException,并打印异常信息。