JavaWeb实现登录验证码功能

先在Web目录下的lib目录中导入jar包:ValidateCode.jar

然后创建一个Servlet类来创建验证码:ValidateCodeServlet.java

  1. 创建验证码
  2. 将验证码存储到session中,用于在浏览器中输入时进行对比
  3. 将验证码以图片的形式发给浏览器,这样页面中的图片路径就可以直接加载这个验证码了
package com.robot.servlet;

import cn.dsna.util.images.ValidateCode;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author 张宝旭
 */
@WebServlet(name = "ValidateCodeServlet", value = "/validateCode")
public class ValidateCodeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1 创建验证码
        ValidateCode validateCode = new ValidateCode(100, 30, 4, 30);
        // 2 将验证码存储到Session
        HttpSession session = request.getSession();
        session.setAttribute("validateCode", validateCode.getCode());
        // 3 将验证码以图片的形式发给浏览器
        validateCode.write(response.getOutputStream());
    }
}

在登录界面的表单中:login.jsp,创建输入验证码的输入框,其中图片的src路径就可以直接加载ValidateCodeServlet中输出的图片了,此validateCode是在Servlet中定义的路径value = “/validateCode”,不是取session中的值

<span style="color: orange; font-size: 35px; ">
    验证码
    <input id="login-validate" name="validate" type="text" placeholder="请输入验证码" style="font-size: 25px"/>
    <img id="img" src="validateCode"  οnclick="changeImg()"/>
</span>

在验证码图片中实现了点击图片就刷新的方法

<script type="text/javascript">
    function changeImg() {
        document.getElementById("img").src="validateCode?n="+Math.random();
    }
</script>

此时session中存储了验证码,在页面中也有验证码图片,可以输入验证码了,然后需要的就是将输入的验证码和存储的验证码匹配,检查是否正确

在登录的Servlet中进行判断:LoginServlet.java

获取提交过来的验证码,再获取session中存储的验证码,判断两者是否匹配,如果不匹配,则还跳转到登录界面重新登录,如果匹配成功,就继续执行接下来的代码

String validate1 = request.getParameter("validate");
String validate2 = (String) session.getAttribute("validateCode");
if (!validate1.equalsIgnoreCase(validate2)) {
    response.sendRedirect("login.jsp");
    return;
}

最终效果大致如下

在这里插入图片描述

  • 7
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值