圖形驗證碼工具easy-captcha



支持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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM