目錄
- 一、CaptchaUtil代碼展示
- 二、CaptchaController 代碼展示
一、CaptchaUtil代碼展示
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{@Beanpublic 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 代碼展示
@RestController
@RequestMapping("/code")
public class CaptchaController {@Autowiredprivate DefaultKaptcha defaultKaptcha;@GetMapping( "/captcha")public void captcha(HttpServletRequest request, HttpServletResponse response){//定義response輸出類型為image/jpegresponse.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();//輸出流輸出圖片,格式為jpgImageIO.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,并打印異常信息。