用java生成验证码
来源:互联网 发布:软件开发述职报告 编辑:程序博客网 时间:2024/05/17 00:17
一、验证码的作用
验证码是目前大多网站所支持并使用于注册登录的。其作用在于能有效防止恶意登录注册,验证码每次都不同,
这就防止了病毒或者软件自动申请用户及自动登陆的问题。
二、原理
验证码是目前大多网站所支持并使用于注册登录的。其作用在于能有效防止恶意登录注册,验证码每次都不同,
这就防止了病毒或者软件自动申请用户及自动登陆的问题。
二、原理
验证码于服务器端生成,发送给客户端,并以图像格式显示。客户端提交所显示的验证码,服务端接收并进行比较,若比对失败则不能实现登录或注册,反之成功后跳转相应界面。
代码如下:
----------------------------------ImageUtil.java-----------------------------------
package com.obtk.utils;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import java.util.*;import javax.imageio.ImageIO;public class ImageUtil { //根据阿拉伯数字和字母随机得到4个字符作为验证码public static char[] generateCheckCode() {String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";char[] rands = new char[4];for (int i = 0; i < 4; i++) {//0-35之间的一个随机数int rand = (int) (Math.random() * chars.length());rands[i] = chars.charAt(rand);}return rands;}//把产生的验证码生成一张图片,并且写入输出流中 //如果传入的输出流是文件输出流,就会在磁盘上生成验证码图片 //如果传入的是网络输出流,则在客户端浏览器显示验证码图片public static String outPutImage(OutputStream sos)throws IOException{int width = 65;// 设置图片的宽度int height = 25;// 设置图片的高度Random random = new Random();//相当于画纸BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //得到画笔 Graphics g = image.getGraphics(); //设置背景色 ,rgb三原色,150以上颜色较淡,适合做背景 g.setColor(new Color(200+random.nextInt(50), 200+random.nextInt(50),200+random.nextInt(50))); //以前面设置的颜色填充我们的画纸 g.fillRect(0,0,width,height); //设置字体 Tines Nev Roman g.setFont(new Font("黑体",Font.ITALIC,18)); //随机产生认证码 char[] sRands =generateCheckCode(); for(int i = 0; i < sRands.length; i++){ //设置内容的颜色 g.setColor(new Color(20+random.nextInt(110), 20+random.nextInt(110),20+random.nextInt(110))); //将认证码画到画纸上 g.drawString(sRands[i]+"",13*i+6,19); } //收工,图像生效 g.dispose(); //把图像写到输出流里面,输出图像到页面 ImageIO.write(image,"JPG",sos); return new String(sRands);}}-------------------------------后台servlet代码CreateCode.java------------------------------------
package com.code.servlets;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.obtk.utils.ImageUtil;public class CreateCode extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {HttpSession session = request.getSession();response.setContentType("image/jpg");ServletOutputStream sos=response.getOutputStream();String sRands=ImageUtil.outPutImage(sos); sos.close(); //把得到的验证码保存到session中 session.setAttribute("rCode",new String(sRands)); } }
-------------------------------前端jsp页面Login.jsp------------------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>用户登录</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><style type="text/css"> #show{ margin:auto;width:400px;}#showErr{color: red;}.code{ vertical-align: middle;}#imgCode{vertical-align: middle;}</style><script src="DatePicker/WdatePicker.js" type="text/javascript"></script><script type="text/javascript">function changeCode(){var imgTag=document.getElementById("imgCode");var timenow = new Date().getMilliseconds();imgTag.src="CreateCode.do?id="+timenow; //每一次请求都是一个新的请求}</script></head> <body><div id="show"><h2>用户登陆</h2><form action="Login.html" method="post"> <table border="1px"> <tr><td>请输入用户名:</td><td><input class="tt" type="text" name="userName" /></td></tr> <tr><td>请输入密码:</td><td><input class="tt" type="password" name="passWord" /></td></tr> <tr><td>请输入验证码:</td><td><input class="code" type="text" name="inputCode" /> <img src="CreateCode.do" id="imgCode" onclick="changeCode();"/></td></tr> <tr><td>请输入出生日期:</td><td> <input type="text" name="myDate" onfocus="WdatePicker();" readonly="readonly" /></td></tr> <tr><td colspan="2" align="center"><input type="submit" value="登陆" /> <input type="reset" value="重置"/></td></tr> </table></form></div></body></html>运行效果如图所示:
阅读全文
0 0
- 用java生成验证码
- java生成验证码
- Java 生成验证码
- Java 验证码生成
- java生成验证码
- java生成验证码
- java生成验证码
- Java生成验证码
- Java生成验证码
- java生成验证码
- java生成验证码
- java验证码生成
- java生成验证码
- Java生成验证码
- java生成验证码
- Java生成验证码
- Java生成验证码
- JAVA--生成验证码
- JavaSE基础知识整理
- Source Insight的设置:将函数名的字体设置为大号字体,加粗,醒目,方便阅读
- java判断回文字符串几种简单的实现
- [算法分析与设计] leetcode 每周一题: 542. 01 Matrix
- 继承,随机数Random
- 用java生成验证码
- 设置Maven中央仓库 国内镜像 [本地仓库]
- storm之wordCount
- Linux 习题4
- Java 8中HashMap冲突解决
- 字符识别(OCR)相关工具/库/教材/论文等资源整理
- mybatis的批量插入
- #盼望着,盼望着,优惠券来了,双十一的脚步近了……
- c++ this指针常见知识点