IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 用Java简单实现验证码功能以及校验 -> 正文阅读

[Java知识库]用Java简单实现验证码功能以及校验

作者:token annotation punctuation

目录结构

在这里插入图片描述

流程图

在这里插入图片描述

LoginServlet

package com.itheima.web.servlet.session;

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 java.io.*;

/**
 * @program:
 * @description
 * @author: YunLong
 **/
@WebServlet(urlPatterns = "/LoginServlet")
public class LoginServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 处理响应中文乱码    
        response.setContentType("text/html;charset=utf-8");

        String vc = request.getParameter("verifyCode");
        String code_session = (String) request.getSession().getAttribute("code_session");

        if(code_session.equalsIgnoreCase(vc)){

            //response.getWriter().write("<h1 style='color:red'>验证码校验成功!</h1>");
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            boolean flag=false;

            BufferedReader br = new BufferedReader(new FileReader("d:/stu.txt"));
            String line;
            while((line=br.readLine())!=null){
                System.out.println(line);
                String uname = line.split("\\,")[0];
                System.out.println(uname);
                String pword = line.split("\\,")[1];
                System.out.println(pword);
                if(username.equals(uname)&&pword.equals(password)){
                    flag=true;
                }
            }

            if(flag){
                request.getSession().setAttribute("username",username);
                response.sendRedirect(request.getContextPath()+"/success.html");
            }
            else{
                response.sendRedirect(request.getContextPath()+"/fail.html");
            }
        }else{
            response.getWriter().write("<h1 style='color:red'>验证码校验失败!</h1>");
        }

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 处理请求的中文乱码    
        request.setCharacterEncoding("utf-8");
        doGet(request, response);
    }

}

CheckcodeServlet(生成验证码)

package com.itheima.web.servlet.session;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/checkcodeServlet")
public class CheckcodeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//  创建画布
		int width = 120;
		int height = 40;
		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		//  获得画笔
		Graphics g = bufferedImage.getGraphics();
		//  填充背景颜色
		g.setColor(Color.white);
		g.fillRect(0, 0, width, height);
		//  绘制边框
		g.setColor(Color.red);
		g.drawRect(0, 0, width - 1, height - 1);
		//  生成随机字符
		//  准备数据
		String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
		//  准备随机对象
		Random r = new Random();
		//  声明一个变量 保存验证码
		String code = "";
		//  书写4个随机字符
		for (int i = 0; i < 4; i++) {
			//  设置字体
			g.setFont(new Font("宋体", Font.BOLD, 28));
			//  设置随机颜色
			g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));

			String str = data.charAt(r.nextInt(data.length())) + "";
			g.drawString(str, 10 + i * 28, 30);

			//  将新的字符 保存到验证码中
			code = code + str;
		}
		//  绘制干扰线
		for (int i = 0; i < 6; i++) {
			//  设置随机颜色
			g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));

			g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
		}

		//  将验证码 打印到控制台
		System.out.println(code);

		//  将验证码放到session中
		request.getSession().setAttribute("code_session", code);

		//  将画布显示在浏览器中
		ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
	}

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

}

ShowPriServlet(用来校验用户是否是在登陆的时候进入的success.html界面中,并且查看已有的权限)

package com.itheima.web.servlet.session;

import javax.servlet.RequestDispatcher;
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 java.io.IOException;

/**
 * @program:
 * @description
 * @author: YunLong
 **/
@WebServlet(urlPatterns = "/ShowPriServlet")
public class ShowPriServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 处理响应中文乱码    
        response.setContentType("text/html;charset=utf-8");

        String username = (String)request.getSession().getAttribute("username");

        if(username!=null){
            request.getRequestDispatcher("/WEB-INF/pri.html").forward(request,response);
        }else{
            response.getWriter().write("<h2 style='color:red'>你还未登陆,无法查看已有权限,请先<a href='/day24_cookie/login.html'>登录  </a></h2>");

        }


    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 处理请求的中文乱码    
        request.setCharacterEncoding("utf-8");
        doGet(request, response);
    }

}

login.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>用户登录</title>
        <script>
            window.onload=function () {
                document.querySelectorAll("img")[0].onclick=function () {
                    this.src="/day24_cookie/checkcodeServlet?time="+new Date().getTime();
                }
            }
        </script>
    </head>
    <body>
        <form action="/day24_cookie/LoginServlet" method="get">
            用户名:<input type="text" name="username"><br/>&emsp;码:<input type="password" name="password"><br/>
            验证码:<input type="text" name="verifyCode">  <!--验证码一般是一个图片-->
            <img src="/day24_cookie/checkcodeServlet">
            <br/>
            <input type="submit" value="登录">
        </form>
    </body>
</html>

success.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录成功页面</title>
    </head>
    <body>
        <h2 style="color: red">恭喜您,登陆成功!</h2>
        <a href="/day24_cookie/ShowPriServlet">查看我的权限</a>
    </body>
</html>

fail.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>失败提示页</title>
    </head>
    <body>
        <h2 style="color:red;">用户名或密码错误</h2>
        <a href="login.html">重新登陆</a>
    </body>
</html>
查看已有权限功能没有实现。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 07:54:27  更:2022-05-08 07:56:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:15:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码