支持gif、中文、算術等類型,可用於Java Web、JavaSE等項目
導入依賴:
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
或者
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
前端:
- ?d='+new Date()*1不影響鏈接,它唯一的作用是向IE表明: 圖片鏈接發生了變化,圖片需要刷新
<img alt="單擊圖片刷新!" class="pointer" th:src="@{/common/kaptcha}"
onclick="this.src='/common/kaptcha?d='+new Date()*1">
<!--.-->
生成圖片的controller:
@GetMapping("/common/kaptcha")
public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/png");
// 三個參數分別為寬、高、位數
SpecCaptcha captcha = new SpecCaptcha(150, 40, 4);
// 設置類型 數字和字母混合
captcha.setCharType(Captcha.TYPE_DEFAULT);
//設置字體
captcha.setCharType(Captcha.FONT_9);
// 驗證碼存入session
httpServletRequest.getSession().setAttribute("verifyCode", captcha.text().toLowerCase());
// 輸出圖片流
captcha.out(httpServletResponse.getOutputStream());
}
登錄判斷的controller:
@PostMapping(value = "/login")
public String login(@RequestParam("userName") String userName,
@RequestParam("password") String password,
@RequestParam("verifyCode") String verifyCode,
HttpSession session,
HttpServletRequest request) {
//獲得驗證碼,注意與上面的verifyCode區分:上面那個是 用戶輸入的驗證碼,session中的"verifyCode"的是圖片上生成的驗證碼
String kaptchaCode = session.getAttribute("verifyCode")+"";
//進行判斷:保證用戶輸入的不為空
if(!StringUtils.hasLength(verifyCode)){
session.setAttribute("errorMsg","驗證不能為空!");
return "admin/login";
}
//hasLength判斷是否為空:為空則false
if (!StringUtils.hasLength(kaptchaCode) || !verifyCode.toLowerCase().equals(kaptchaCode)){
session.setAttribute("errorMsg","驗證碼錯誤!");
return "admin/login";
}
String getAdminPsw = MD5Util.MD5Encode(password,"UTF-8");
AdminUser login = adminUserService.login(userName, getAdminPsw);
if (login == null){
session.setAttribute("errorMsg","用戶名或者密碼錯誤!");
return "admin/login";
}
session.setAttribute("admin",login);
session.setAttribute("loginUser", login.getNickName());
session.setAttribute("loginUserId", login.getAdminUserId());
return "admin/index";
}

參考鏈接:
https://www.jianshu.com/p/8a853a13159b
https://blog.csdn.net/qq_43619628/article/details/112383930
