zoukankan      html  css  js  c++  java
  • Kaptcha验证码组件

    第一步:引入对应的组件信息
    pom.xml中添加
    <!-- Kaptcha验证码组件 -->
            <dependency>
                <groupId>com.github.penggle</groupId>
                <artifactId>kaptcha</artifactId>
                <version>2.3.2</version>
            </dependency>
    第二步:在applicationContext.xml中添加设置信息
    <!-- 配置Kaptcha -->
        <bean id="kaptchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
            <property name="config">
                <bean class="com.google.code.kaptcha.util.Config">
                    <constructor-arg>
                        <props>
                            <!--验证码图片不生成边框-->
                            <prop key="kaptcha.border">no</prop>
                            <!-- 验证码图片宽度为120像素 -->
                            <prop key="kaptcha.image.width">120</prop>
                            <!-- 验证码图片字体颜色为蓝色 -->
                            <prop key="kaptcha.textproducer.font.color">blue</prop>
                            <!-- 每个字符最大占用40像素 -->
                            <prop key="kaptcha.textproducer.font.size">40</prop>
                            <!-- 验证码包含4个字符 -->
                            <prop key="kaptcha.textproducer.char.length">4</prop>
                        </props>
                    </constructor-arg>
                </bean>
            </property>
        </bean>
    
    第三步:添加工具类KaptchaController.java
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import javax.annotation.Resource;
    import javax.imageio.ImageIO;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import com.google.code.kaptcha.Producer;
    @Controller
    public class KaptchaController {
        @Resource
        private Producer kaptchaProducer;
        @GetMapping("/verify_code")
        public void createVerifyCode(HttpServletRequest request , HttpServletResponse response) throws IOException {
            //响应立即过期
            response.setDateHeader("Expires",0);
            //不缓存任何图片数据
            response.setHeader("Cache-Control" , "no-store,no-cache,must-revalidate");
            response.setHeader("Cache-Control" , "post-check=0,pre-check=0");
            response.setHeader("Pragma" , "no-cache");
            response.setContentType("image/png");
            //生成验证码字符文本
            String verifyCode = kaptchaProducer.createText();
            request.getSession().setAttribute("kaptchaVerifyCode",verifyCode);
            System.out.println(request.getSession().getAttribute("kaptchaVerifyCode"));
            BufferedImage image = kaptchaProducer.createImage(verifyCode);//创建验证码图片
            ServletOutputStream out = response.getOutputStream();
            ImageIO.write(image, "png", out);//输出图片流
            out.flush();
            out.close();
        }
    }
    
    第四步:在前台需要的jsp页面的img标签中,调用对应路径即可
    <img id="imgVerifyCode" src="/verify_code"
                                 style=" 120px;height:50px;cursor: pointer">
    添加对应的点击刷新功能
        //重新发送请求,刷新验证码
        function reloadVerifyCode(){
            //请在这里实现刷新验证码
            $("#imgVerifyCode").attr("src","/verify_code?ts=" + new Date().getTime());
        }
        
        //点击验证码图片刷新验证码
        $("#imgVerifyCode").click(function () {
            reloadVerifyCode();
        });
    后台验证时:
        前台ajax提交,后台从HttpServletRequest request中获取:
      String verifyCode = (String)request.getSession().getAttribute("kaptchaVerifyCode");
      此处kaptchaVerifyCode 为验证码生成工具中的request 所添加的 request.getSession().setAttribute("kaptchaVerifyCode",verifyCode);
    
      @PostMapping("/registe")
        @ResponseBody //vc:前台输入验证码  username:用户名 password:密码 nickname:昵称
        public Map registe(String vc, String username, String password , String nickname , HttpServletRequest request){
            //正确验证码
            String verifyCode = (String)request.getSession().getAttribute("kaptchaVerifyCode");
            //验证码对比
            Map result = new HashMap();
         //equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。
    if(vc == null || verifyCode == null || !vc.equalsIgnoreCase(verifyCode)){ result.put("code", "VC01"); result.put("msg", "验证码错误"); }else{ try { memberService.createMember(username, password, nickname); result.put("code", "0"); result.put("msg", "success"); }catch (BussinessException ex){ ex.printStackTrace(); result.put("code", ex.getCode()); result.put("msg", ex.getMsg()); } } return result; }
  • 相关阅读:
    CppUnit使用指南
    详细分析内存泄露检测
    设计模式之我的理解创建型模式:工厂方法
    MSXML2使用笔记
    【C++】函数指针
    设计模式之我的理解桥模式
    python 使用pyinstaller,pywin32打包.py成.exe应用程序
    python 获取当前时间的用法
    python 使用urllib.urlopen超时问题的解决方法
    python pip的安装流程,以及使用pip更新,卸载第三方模块
  • 原文地址:https://www.cnblogs.com/ljc1212/p/14941669.html
Copyright © 2011-2022 走看看