图形验证码工具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


posted @   卡卡发  阅读(961)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示