圖形驗證碼工具easy-captcha
阿新 • • 發佈:2022-03-23
支援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 //先判斷左邊:當圖片上的驗證碼為空時,則左邊!false=true,此時if(true),不會對右邊進行判斷了;當圖片上的驗證碼不為空時,左邊表示式為 !true=false 。 //當左邊表示式為空時,會接著判斷右邊的值:使用者輸入的驗證碼和圖片上的相同,則右邊為!true=false,則if(false)不進行if裡面的語句 //當用戶輸入的驗證碼和圖片上的不相同,則右邊為!false=true,則if(false || true)=if(true),因此提示驗證碼錯誤 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