实现带有验证码的简易登录页面

需求:
  1. 访问带有验证码的登录页面login.jsp
  2. 用户输入用户名,密码以及验证码。
    * 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
    * 如果验证码输入有误,跳转登录页面,提示:验证码错误
    * 如果全部输入正确,则跳转到主页success.jsp,显示:用户名,欢迎您

login.jsp页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login</title>
    <script>
       /*
            分析:
                点击图片,需要换一张
                1.给图片绑定单击事件
                2.重新设置图片的src属性值
           */
       window.onload = function(){         document.getElementById("img").onclick = function(){           this.src="/yanzhengma_war_exploded/checkCodeServlet?time="+new Date().getTime();          }        }     </script>

  <style>
        div{
            color: red;
        }
    </style>
</head>
<body>
    <form action="/yanzhengma_war_exploded/loginServlet" method="post">
        <table>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td>验证码</td>
                <td><input type="text" name="checkCode"></td>
            </tr>
            <tr>
                <td colspan="2"><img id="img" src="/yanzhengma_war_exploded/checkCodeServlet"></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="登录"></td>
            </tr>
        </table>
    </form>

    <div><%=request.getAttribute("cc_error") == null ? "" : request.getAttribute("cc_error")%></div>
    <div><%=request.getAttribute("login_error") == null ? "" : request.getAttribute("login_error") %></div>

</body>
</html>

生成验证码的代码:

@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置验证码框的宽、高
        int width = 100;
        int height = 50;

        //1.创建一对象,在内存中图片(验证码图片对象)
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

        //2.美化图片
        //2.1 填充背景色
        Graphics g = image.getGraphics();//画笔对象
        g.setColor(Color.PINK);//设置画笔颜色
        g.fillRect(0,0,width,height);

        //2.2画边框
        g.setColor(Color.BLUE);
        //宽高不减一,会有一半的边框样式体现不出来
        g.drawRect(0,0,width - 1,height - 1);

        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
        //生成随机角标
        Random ran = new Random();
        StringBuilder sb = new StringBuilder();
        //验证码有4个数,故循环四次
        for (int i = 1; i <= 4; i++) {
            int index = ran.nextInt(str.length());
            //获取字符
            char ch = str.charAt(index);//随机字符
            sb.append(ch);

            //2.3写验证码
            g.drawString(ch+"",width/5*i,height/2);
        }
        String checkCode_session = sb.toString();
        //将验证码存入session
        request.getSession().setAttribute("checkCode_session",checkCode_session);

        //2.4画干扰线
        g.setColor(Color.GREEN);

        //随机生成坐标点
        for (int i = 0; i < 10; i++) {
            int x1 = ran.nextInt(width);
            int x2 = ran.nextInt(width);

            int y1 = ran.nextInt(height);
            int y2 = ran.nextInt(height);
            //两点确定一线,点(x1,y1)到点(x2,y2)形成一条线
            g.drawLine(x1,y1,x2,y2);
        }

        //3.将图片输出到页面展示
        ImageIO.write(image,"jpg",response.getOutputStream());            

loginServlet代码:(用户的登录涉及到数据库的操作,此处将DAO省去,简化编写 )

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置request编码
        request.setCharacterEncoding("utf-8");
        //2.获取参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String checkCode = request.getParameter("checkCode");
        //3.先获取生成的验证码
        HttpSession session = request.getSession();
        String checkCode_session = (String) session.getAttribute("checkCode_session");
        //删除session中存储的验证码,为了防止返回登陆页面后原验证码依旧可用
        session.removeAttribute("checkCode_session");
        //3.先判断验证码是否正确
        if(checkCode_session!= null && checkCode_session.equalsIgnoreCase(checkCode)){
            //忽略大小写比较
            //验证码正确
            //判断用户名和密码是否一致
            if("zhangsan".equals(username) && "123".equals(password)){//需要调用UserDao查询数据库
                //登录成功
                //存储信息,用户信息
                session.setAttribute("user",username);
                //重定向到success.jsp
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }else{
                //登录失败
                //存储提示信息到request
                request.setAttribute("login_error","用户名或密码错误");
                //转发到登录页面
                request.getRequestDispatcher("/login.jsp").forward(request,response);
            }

        }else{
            //验证码不一致
            //存储提示信息到request
            request.setAttribute("cc_error","验证码错误");
            //转发到登录页面
            request.getRequestDispatcher("/login.jsp").forward(request,response);

        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

success.jsp页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h1><%=request.getSession().getAttribute("user")%>,欢迎您</h1>

</body>
</html>

原文地址:https://www.cnblogs.com/churujianghudezai/p/11795680.html

时间: 2024-10-13 06:04:11

实现带有验证码的简易登录页面的相关文章

登录页面动态验证码的设置

登录页面动态验证码的设置 采用php中创建对象的思想进行动态验证码的设置 1.创建出一个背景图片,用来存放动态码输出位置 1 function createImage(){ 2 // 创建图片对象,并设置图片的宽高 imagecreatetruecolor 3 $this->image = imagecreatetruecolor($this->width, $this->height); 4 // 图片创建背景颜色 5 // rand(下界,上界), php中的随机数 6 $backg

2.简易的登录页面(表单验证)(HTML+JavaScript+Jquery)

//HTML部分 <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>登录页面</title> <link rel="stylesheet" type="text/css" href="css/login.css"/> <script src="https://a

单点登录CAS使用记(四):为登录页面加上验证码

CAS默认的登录页面样式如下,只有用户名与密码两项验证项目. 现在需要为首页登录加上验证码功能. 第一步:首页对默认登录页面的样式进行了调整,使其看上去还算美观. 在页面上加上了验证码项目. 第二步:导入验证码生成工具包及生成验证码配置 pom.xml中加入如下配置 <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> &l

C#登录页面验证码刷新

验证码生成页面  png.aspx using System; using System.Collections.Generic; using System.Drawing; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Maticsoft.Web.Admin { public partial class png : System.Web.UI.Page { protected

QWebFramewok使用教程之-(三)自定义带验证码的登录页面

框架中自带了一个登录简单的界面Login.aspx,用于快速开发.如果对界面有要求的可以自己定义登录页面风格. 实现的原理很简单,做好页面UI后,后台代码使用框架自带用户登录验证的接口即可. 验证接口:QWebFramework.Services.UserServices.GetInstance().CheckedUserLogin(userName, passWordEncrypt, true); 以下为演示的代码: 1.新建立一个登录页面:DemoLogin.aspx,为了方便起见,演示代码

Java使用SSM框架实现登录页面的验证码功能

最终效果展示: 代码展示: 1.前端登录页面代码展示 <div class="form-group"> <div class="input-icon"> <i class="fa fa-picture-o"></i> <input class="form-control" style="width:180px;" type="text"

Vue.js写一个SPA登录页面的过程

技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cookie或者本地存储的值): 如果有登录态则查询登录信息(uid,头像等...)并保存起来:如果没有则跳转到登录页: 在登录页面(或者登录框),校检用户输入信息是否合法: 校检通过后发送登录请求:校检不成功则反馈给用户: 登录成功则从后端数据中取出session信息保存登录状态(可能需要跳转);登录不成功

cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)

转:http://blog.csdn.net/ae6623/article/details/8861065 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标: 下面是正文: 打开cas的默认首页,映入眼帘的是满眼的中文and英文混杂体,作为一名合格的用户,我表示很不开心. 于是,打开 Nodepad++,寻找C:\tomcat7\webapps\casServer\WEB-INF\view\jsp\default\ui \casLoginView.jsp这个页

绕过session验证码实现批量登录注册

验证码的分类: 目前市面上验证码的主要分为两大类:session验证码.cookie验证码. 今天主要讲Session验证码.Session验证码顾名思义就是跟会话有关系,当客户端每次访问登录或者注册页面的时候,会执行一次验证码生成的操作,然后把生成的验证码保存到session的某个参数中(比如我们保存到名称为"VerificationCode"),在用户执行登录或者注册的时候,就会去session中去取VerificationCode这个参数的值,与其进行对比,如果一样,则能成功通过