【Java】运用Servlet实现注册页面的验证码登录

目标:

通过让用户填写验证码并在服务器端检查,防止被恶意访问和DDOS攻击

思路:

 步骤:

(1)导入Kaptcha-2.3.2.jar

https://code.google.com/archive/p/kaptcha/downloadshttps://code.google.com/archive/p/kaptcha/downloads        ①配置KaptchaServlet:

                jar包已经有servlet的java类,直接在web.xml中配置servlet

 <servlet>
        <servlet-name>kaptchaServlet</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
    <!-- 配置kaptcha.border的值为no取消图片边框 -->
    <init-param>
        <param-name>kaptcha.border</param-name>
        <param-value>no</param-value>
    </init-param>
    <!-- 配置图片宽度 -->
    <init-param>
        <param-name>kaptcha.image.width</param-name>
        <param-value>110</param-value>
    </init-param>
    <!-- 配置图片高度 -->
    <init-param>
        <param-name>kaptcha.image.hight</param-name>
        <param-value>20</param-value>
    </init-param>
    <!-- 配置字体大小 -->
    <init-param>
        <param-name>kaptcha.textproducer.font.size</param-name>
        <param-value>30</param-value>
    </init-param>
        <!--在这里可以配置验证码存储进session时候的key-->
        <init-param>
            <param-name>kaptcha.session.key</param-name>
            <param-value>serverCode</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>kaptchaServlet</servlet-name>
        <url-pattern>/kaptcha</url-pattern>
    </servlet-mapping>

(2)在注册页面修改标签

        ①修改register.html的验证码图片的源

<img src="kaptcha" alt="" />

        ②点击图片进行刷新

<input type="text" placeholder="" name="checkCode"/>
<img src="kaptcha" alt="" @click="changCodeImg()" />

        ③修改验证码标签

 <label>验证码:</label>
    <div class="verify">
    <input type="text" placeholder="" name="checkCode"/>
    <img src="kaptcha" alt="" @click="changCodeImg()" />
    </div>

(3)定义Vue代码中的刷新验证码函数

changCodeImg(){
            //切换验证码图片,重新设置当前图片的src
            //event.target就表示获取当前事件所在的标签
            event.target.src = "kaptcha"
          }

(4)在UserServlet的doRegister方法中加入验证码

 //处理注册功能
    public void doRegister(HttpServletRequest request,HttpServletResponse response)throws IOException{
        //使用数据库的注册
        //获取请求参数封装到user中
        Map<String,String[]> parameterMap = request.getParameterMap();
        User parameterUser = new User();
        try{
            BeanUtils.populate(parameterUser,parameterMap);
            //获取客户端驶入的验证码
            String checkCode = parameterMap.get("checkCode")[0];
            //获取kaptchaservlet中生产的验证码
            String serveCode = (String) request.getSession().getAttribute("serverCode");

            //开始校验验证码
            if(checkCode.equalsIgnoreCase(serveCode)){
                //调用业务层方法处理注册功能
                userService.doRegister(parameterUser);
                //想要在多个动态资源之间共享registerUser对象
                //将registerUser对象存储到session域对象中
                HttpSession session = request.getSession();
                session.setAttribute(BookStoreConstants.REGISTERUSER_SESSIONKEY, parameterUser);
                //没有出现异常,说明注册成功,跳转到regist_success页面
                processTemplate("user/regist_success",request,response);
            }else {
                //验证错误
                throw  new RuntimeException("注册失败,验证码错误");
            }
        }catch (IllegalAccessException e){
            e.printStackTrace();
        }catch (InvocationTargetException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
            //返回失败信息
            request.setAttribute("errorMsg",e.getMessage());
            //注册失败,返回register页面
            processTemplate("user/regist",request,response);
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值