Jsp常用技巧图片验证码

合集下载

JS实现图片验证码功能

JS实现图片验证码功能

JS实现图⽚验证码功能本⽂实例为⼤家分享了JS实现图⽚验证码功能的具体代码,供⼤家参考,具体内容如下以下代码可以直接copy运⾏,不需要引⼊jquery.jar1. html代码<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script src="<%=request.getContextPath()%>/js/gVerify.js"></script><style type="text/css">body, html {width: 100%;text-align: center;}#picyzm {width: 100px;height: 40px;display: inline-block;margin: 0 30px;}#verifyCodeDemo {width: 100%;display: flex;margin-top: 200px;justify-content: center;}#btn {margin: 30px auto;background-color: blue;color: #fff;border-radius: 5px;border: 0;width: 100px;height: 40px;}</style></head><body><div id="verifyCodeDemo"><input type="text" id="code_input" placeholder="在这个框⾥输⼊验证码"><p id="picyzm"></p></div><input type="button" value="验证" id="btn"><script type="text/javascript">//初始化验证码var verifyCode = new GVerify({id : "picyzm",type : "blend"});//点击按钮验证var code = document.getElementById("code_input");var btn = document.getElementById("btn");btn.onclick = function() {var res = verifyCode.validate(code.value);if (res) {alert("验证通过");} else {alert("验证码错误");}}</script></body></html>2. 引⼊gVerify.js!(function(window, document) {function GVerify(options) { // 创建⼀个图形验证码对象,接收options对象为参数this.options = { // 默认options参数值id: "", // 容器IdcanvasId: "verifyCanvas", // canvas的IDwidth: "100", // 默认canvas宽度height: "30", // 默认canvas⾼度type: "blend", // 图形验证码默认类型blend:数字字母混合类型、number:纯数字、letter:纯字母code: ""}if(Object.prototype.toString.call(options) == "[object Object]"){// 判断传⼊参数类型for(var i in options) { // 根据传⼊的参数,修改默认参数值this.options[i] = options[i];}}else{this.options.id = options;}this.options.numArr = "0,1,2,3,4,5,6,7,8,9".split(",");this.options.letterArr = getAllLetter();this._init();this.refresh();}GVerify.prototype = {/** 版本号* */version: '1.0.0',/** 初始化⽅法* */_init: function() {var con = document.getElementById(this.options.id);var canvas = document.createElement("canvas");this.options.width = con.offsetWidth > 0 ? con.offsetWidth : "100";this.options.height = con.offsetHeight > 0 ? con.offsetHeight : "30";canvas.id = this.options.canvasId;canvas.width = this.options.width;canvas.height = this.options.height;canvas.style.cursor = "pointer";canvas.innerHTML = "您的浏览器版本不⽀持canvas";con.appendChild(canvas);var parent = this;canvas.onclick = function(){parent.refresh();}},/** ⽣成验证码* */refresh: function() {this.options.code = "";var canvas = document.getElementById(this.options.canvasId);if(canvas.getContext) {var ctx = canvas.getContext('2d');}else{return;}ctx.textBaseline = "middle";ctx.fillStyle = randomColor(180, 240);ctx.fillRect(0, 0, this.options.width, this.options.height);if(this.options.type == "blend") { // 判断验证码类型var txtArr = this.options.numArr.concat(this.options.letterArr);} else if(this.options.type == "number") {var txtArr = this.options.numArr;} else {var txtArr = this.options.letterArr;}for(var i = 1; i <= 4; i++) {var txt = txtArr[randomNum(0, txtArr.length)];this.options.code += txt;ctx.font = randomNum(this.options.height/2, this.options.height) + 'px SimHei'; // 随机⽣成字体⼤⼩ ctx.fillStyle = randomColor(50, 160); // 随机⽣成字体颜⾊ctx.shadowOffsetX = randomNum(-3, 3);ctx.shadowOffsetY = randomNum(-3, 3);ctx.shadowBlur = randomNum(-3, 3);ctx.shadowColor = "rgba(0, 0, 0, 0.3)";var x = this.options.width / 5 * i;var y = this.options.height / 2;var deg = randomNum(-30, 30);/** 设置旋转⾓度和坐标原点* */ctx.translate(x, y);ctx.rotate(deg * Math.PI / 180);ctx.fillText(txt, 0, 0);/** 恢复旋转⾓度和坐标原点* */ctx.rotate(-deg * Math.PI / 180);ctx.translate(-x, -y);}/** 绘制⼲扰线* */for(var i = 0; i < 4; i++) {ctx.strokeStyle = randomColor(40, 180);ctx.beginPath();ctx.moveTo(randomNum(0, this.options.width), randomNum(0, this.options.height));ctx.lineTo(randomNum(0, this.options.width), randomNum(0, this.options.height));ctx.stroke();}/** 绘制⼲扰点* */for(var i = 0; i < this.options.width/4; i++) {ctx.fillStyle = randomColor(0, 255);ctx.beginPath();ctx.arc(randomNum(0, this.options.width), randomNum(0, this.options.height), 1, 0, 2 * Math.PI);ctx.fill();}},/** 验证验证码* */validate: function(code){var code = code.toLowerCase();var v_code = this.options.code.toLowerCase();if(code == v_code){return true;}else{return false;}}}/** ⽣成字母数组* */function getAllLetter() {var letterStr = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; return letterStr.split(",");}/** ⽣成⼀个随机数* */function randomNum(min, max) {return Math.floor(Math.random() * (max - min) + min);}/** ⽣成⼀个随机⾊* */function randomColor(min, max) {var r = randomNum(min, max);var g = randomNum(min, max);var b = randomNum(min, max);return "rgb(" + r + "," + g + "," + b + ")";}window.GVerify = GVerify;})(window, document);3. 效果图以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

java jsp servlet验证码

java jsp servlet验证码

Java 验证码1、servlet上画图片:publicclass UserCheckServlet extends HttpServlet {publicvoid doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}publicvoid doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 验证码图片的宽度。

int width = 70;// 验证码图片的高度。

int height = 30;BufferedImagebuffImg = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics2D g = buffImg.createGraphics();// 创建一个随机数生成器类。

Random random = new Random();// 设定图像背景色(因为是做背景,所以偏淡)g.setColor(getRandColor(200,250));g.fillRect(0, 0, width, height);// 创建字体,字体的大小应该根据图片的高度来定。

Font font = new Font("Times New Roman", Font.HANGING_BASELINE, 28);// 设置字体。

g.setFont(font);// 画边框。

g.setColor(Color.BLACK);g.drawRect(0, 0, width - 1, height - 1);// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到。

jsp常用验证格式

jsp常用验证格式

jsp常用验证格式2篇JSP常用验证格式JSP(Java Server Pages)是一种用于开发Web应用程序的Java 技术。

在开发Web应用程序中,我们经常需要对用户输入进行合法性验证,以确保输入的数据符合我们的要求。

本文将介绍JSP中常用的验证格式。

一、表单验证表单验证是Web开发中最常见的验证方式之一。

用户提交表单时,我们可以通过JSP对各个字段进行验证,以确保提交的数据是正确的。

1. 非空验证非空验证是最基本的验证方式之一。

当用户提交表单时,我们可以通过JSP判断各个字段是否为空,如果为空,则提示用户必须填写该字段才能继续提交。

2. 数据类型验证数据类型验证是对用户输入的数据进行类型判断的一种验证方式。

例如,如果我们需要用户输入一个数字,那么我们可以通过JSP判断用户输入的数据是否符合数字类型,并给出相应的提示信息。

3. 长度验证长度验证是对用户输入的数据进行长度判断的一种验证方式。

例如,如果我们需要用户输入一个长度为6的验证码,那么我们可以通过JSP判断用户输入的验证码是否为6位,并给出相应的提示信息。

二、正则表达式验证正则表达式是一种强大的验证工具,可以通过一些特定的规则匹配用户输入的数据。

在JSP中,我们可以使用正则表达式对用户输入的数据进行验证。

1. 邮箱验证邮箱验证是一种常见的验证方式,我们可以使用正则表达式对用户输入的邮箱进行验证。

例如,我们可以使用以下正则表达式判断一个字符串是否符合邮箱格式:^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$2. 手机号码验证手机号码验证也是一种常见的验证方式,我们可以使用正则表达式对用户输入的手机号码进行验证。

例如,我们可以使用以下正则表达式判断一个字符串是否符合手机号码格式:^1[3|4|5|6|7|8|9][0-9]{9}$三、其他验证方式除了表单验证和正则表达式验证外,JSP还提供了其他一些常用的验证方式。

用ServletJSP动态生成图像验证码

用ServletJSP动态生成图像验证码

用ServletJSP动态生成图像验证码现在有不少网站在用户填写表单时,同时要求填写验证码,验证码的一个目的就是防范一些恶意的网站下载软件,这些软件能通过遍历链接而将网站的所有网页下载。

还可以防止用户不经过本网站的页面而使用网站的资源。

所以现在有不少网站都使用了验证码技术,验证码通常是一个在WEB服务器上生成的随机字符串,同时以某种方式保存起来,比如保存到与当前的Session中,然后在用户提交网页时与用户输入的验证比较是否一致,然而如果直接以明文的方式,还是不能防范一些功能较强的自动填写表格的软件。

所以一般将验证码以图片的形式显示出来,同时可以将在图片中显示的字符串进行一些处理,比如使用旋转字符,添加背景纹理等技术以增大被软件识别的难度。

下面简要介绍一下如果实现这种验证码:首先实现一个servlet用来生成图片(当然也可以用jsp实现):import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import com.sun.image.codec.jpeg.*;import java.awt.*;import com.sun.image.codec.jpeg.*;import java.awt.image.BufferedImage;import java.awt.image.DataBuffer;import java.awt.geom.GeneralPath;import javax.swing.*;import java.math.*;public class Servlet1extends HttpServlet {//Process the HTTP Get requestpublic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);response.setContentType("image/jpeg"); //必须设置ContentType为image/jpegint length = 4; //设置默认生成4个数字Date d = new Date();long lseed = d.getTime();java.util.Random r = new Random(lseed); //设置随机种子if (request.getParameter("length") != null) {try {length = Integer.parseInt(request.getParameter("length"));}catch (NumberFormatException e) {}}StringBuffer str = new StringBuffer();for (int i = 0; i <length; i++) {str.append(r.nextInt(9)); //生成随机数字}//可以在此加入保存验证码的代码//创建内存图像BufferedImage bi = new BufferedImage(40, 16, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics();g.clearRect(0, 0, 16, 40);g.setColor(Color.green.CY AN);g.drawString(str.toString(), 4, 12);try {//使用JPEG编码,输出到response的输出流JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response. getOutputStream());JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);param.setQuality(1.0f, false);encoder.setJPEGEncodeParam(param);encoder.encode(bi);}catch (Exception ex) {}}}然后在需求显示验证码的加入以下代码就可以了<img alt="" src="/WebModule1/servlet1" width="40" height="16"/>将/WebModule1/servlet1替换成你用来生成验证码的servlet的全路径。

JavaScript模拟实现12306图片验证码逐梦博客

JavaScript模拟实现12306图片验证码逐梦博客

JavaScript模拟实现12306图片验证码逐梦博客看12306的图片验证码挺好玩的,拿起js我也来实现一个。

既然是验证码就有显示,输入和验证三个过程1、显示12306的图片验证码是把一些小图显示在一张大图上,为了实现这个,我去网上找了一些图片,把同一类别的图片放在一个文件夹下面,根据序号依次命名,这个步骤做完就只需要建立索引数组,标记物体名(文件夹以物体名命名)和物体总图片个数,这样子我们就可以从中随记冲去任意一个物体的任意一张图片。

2、输入输入就是点击图片时会插入的那些笔记小图标啦,对于这些小图标,需要记录下它相对于大图的偏移坐标作为后期验证的依据。

3、验证验证的过程需要从生成图片的时候就开始了,首先我们会从索引数组中抽取任意张图片(在这里8张)形成一个图片数组,打乱数组的顺序,然后将图片依次画到大图上面去,在这里使用的是canvas,在画小图的过程中,根据显示的偏移量生成验证数组,最后将我们点选图片不同位置时生成的便宜坐标拿过来以此和验证数组进行比对。

在这里有一个问题,就是只有点选的坐标数等于验证数组的长度才进行比对,如果长度不一样,那输入肯定是错的。

代码实现:;(function(){var Code = (function(){var canvas,ctx,W,H,picWidth,gap,codeInfo,vCode = [],sources = {};var init = function(){W = 293;H = 190;var codeContainer = document.createElement("div");codeContainer.style.cssText=";width:"+W+"px;height:"+H+" px;position:relative;";codeContainer.id = "codeContainer";canvas = document.createElement("canvas");ctx = canvas.getContext("2d");picWidth = 70;gap = 3;canvas.width = W;canvas.height = H;codeContainer.appendChild(canvas);document.body.appendChild(codeContainer);sources = [{ "name" : "ant" ,"title" : "蚂蚁" , "count" : 2},{ "name" : "bee" ,"title" : "蜜蜂" , "count" : 2},{ "name" : "fan" ,"title" : "电风扇" , "count" : 1},{ "name" : "flower" ,"title" : "花儿" , "count" : 2},{ "name" : "hopper" ,"title" : "蚂蚱" , "count" : 2}];generateCode();createRefreshButton();}var generateCode = function(){clear();codeInfo = getTarget();var pics = getPics();drawTitle(codeInfo.title);particlePics(pics);}var createRefreshButton = function(){var d = document.createElement("div");d.className = 'refresh';canvas.parentNode.appendChild(d);}var drawTitle = function(name){var pre = "请点击下图中",middle = "所有的";ctx.fillStyle = "#000";ctx.font = "16px Arial";ctx.fillText(pre,2,16);ctx.fillStyle = "#f00";ctx.fillText(middle,textWidth(pre,16)+rand(1,3),16);ctx.fillStyle = randC();ctx.font = "20px Arial";ctx.fillText(name,textWidth(pre+middle,16)+rand(2,5),16);drawLine();}var drawLine = function(){ctx.beginPath();ctx.moveTo(0,25);ctx.lineTo(W,25);ctx.stroke();}var getPics = function(){var codeCount = Math.round(Math.random()*(codeInfo.count<8?codeInfo.count: 8)),itemArr = [],extraArr = [],pics = [];codeCount = codeCount ? codeCount: codeCount + 1;var extraCount = 8 - codeCount;for(var i=0;i<codeInfo.count;i++){var src = "images/"+ + "/" + (i+1) +".jpg";var im = new Image();im.src = src;itemArr.push({'img' : im,'name' : });}while(codeCount>0){var index = Math.floor(Math.random()*itemArr.length),src = itemArr[index];pics.push(src);itemArr.splice(index,1);codeCount--;}for(var index in sources){var item = sources[index];if(!=){for(var i=0;i<item.count;i++){var src = "images/"+ + "/" + (i+1) +".jpg";var im = new Image();im.src = src;extraArr.push({'img' : im,'name' : });}}}while(extraCount>0){var index = Math.floor(Math.random()*extraArr.length),src = extraArr[index];pics.push(src);extraArr.splice(index,1);extraCount--;}return pics;}var particlePics = function(pics){var pics = randArray(pics);for(var i=0,l=pics.length;i<l;i++){(function(i){var item = pics[i],im = item.img,x = (i%4)*(picWidth+gap),y=((i/4)>>0)*(picWidth+gap)+35;if(===){vCode.push({'x' : x,'y' : y})}im.onload = function(){ctx.drawImage(im,x,y);}})(i);}}var verify = function(select,callback){var len = vCode.length;callback && callback();if(select.length!==len){alert("验证失败!");reload();return;}var count = 0;for(var i=0,l=select.length;i<l;i++){var item = select[i];vCode.map(function(row){if(item.x>=row.x&&item.x<=row.x+picWidth&&item.y>=ro w.y&&item.y<=row.y+picWidth){count++;}})}if(count!==len){alert("验证失败!");reload();return;}else{alert("验证成功!");reload();return;}}var reload = function(){vCode.length = 0;generateCode();}var clear = function(){ctx.clearRect(0,0,W,H);}var getTarget = function(){return sources[Math.floor(Math.random()*sources.length)];}var textWidth = function(string,size){ctx.font = size + "px Arial";return ctx.measureText(string).width;}var rand = function(min,max){return Math.random() * (max - min) + min;}var randC = function(){return "rgb(" + ((Math.random() * 255)>>0) + "," + ((Math.random() * 255)>>0) + "," +((Math.random() * 255)>>0) +")";}var randArray = function(arr){return arr.sort(function(a,b){return Math.random()>0.5?true:false;});}return {init : init,verify : verify,reload : reload}})();window.Code = window.Code || Code;})();在线实例:。

jsp图片验证码

jsp图片验证码

<%@ page contentType="image/jpeg"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%!Color getRandColor(int fc,int bc){//给定范围获得随机颜色Random random = new Random();if(fc>255) fc=255;if(bc>255) bc=255;int r=fc+random.nextInt(bc-fc);int g=fc+random.nextInt(bc-fc);int b=fc+random.nextInt(bc-fc);return new Color(r,g,b);}%><%//设置页面不缓存response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);// 在内存中创建图象int width=60, height=20;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 获取图形上下文Graphics g = image.getGraphics();//生成随机类Random random = new Random();// 设定背景色g.setColor(getRandColor(200,250));g.fillRect(0, 0, width, height);//设定字体g.setFont(new Font("Times New Roman",Font.PLAIN,18));//画边框//g.setColor(new Color());//g.drawRect(0,0,width-1,height-1);// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160,200));for (int i=0;i<155;i++){int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x,y,x+xl,y+yl);}// 取随机产生的认证码(4位数字)String sRand="";for (int i=0;i<4;i++){String rand=String.valueOf(random.nextInt(10));sRand+=rand;// 将认证码显示到图象中g.setColor(newColor(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt (110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成g.drawString(rand,13*i+6,16);}// 将认证码存入SESSIONsession.setAttribute("rand",sRand);// 图象生效g.dispose();// 输出图象到页面ImageIO.write(image, "JPEG", response.getOutputStream());%>保存成image.jsp,调用的时候用<img src="image.jsp" width="60"height="20">就可以了1、图片类package com.esoon.EZActor.ezconfig;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;public class Image {public String sRand = "";public Color getRandColor(int fc, int bc) {//给定范围获得随机颜色Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}public BufferedImage creatImage() {// 在内存中创建图象int width = 60, height = 20;BufferedImage image = new BufferedImage(width, height, BufferedIm age.TYPE_INT_RGB);// 获取图形上下文Graphics g = image.getGraphics();//生成随机类Random random = new Random();// 设定背景色g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, height);//设定字体g.setFont(new Font("Times New Roman", Font.PLAIN, 18));//画边框//g.setColor(new Color());//g.drawRect(0,0,width-1,height-1);// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 155; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(120);int yl = random.nextInt(120);g.drawLine(x, y, x + xl, y + yl);}// 取随机产生的认证码(4位数字)//String rand = request.getParameter("rand");//rand = rand.substring(0,rand.indexOf("."));for (int i = 0; i < 4; i++) {String rand = String.valueOf(random.nextInt(10));sRand += rand;// 将认证码显示到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成g.drawString(rand, 13 * i + 6, 16);}// 图象生效g.dispose();return image;}}显示图片Servletpackage com.esoon.EZActor.ezconfig;import java.io.IOException;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RandomImage extends HttpServlet {/*** Constructor of the object.*/public RandomImage() {super();}public void doGet(HttpServletRequest request, HttpServletResponse resp onse)throws ServletException, IOException {// 设置输出格式response.setContentType("image/jpeg");// 设置页面不缓存response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);// 生成图片Image image = new Image();// 输出图象到页面ImageIO.write(image.creatImage(), "JPEG", response.getOutputStream ());// 打印验证码System.out.println(image.sRand);}public void doPost(HttpServletRequest request, HttpServletResponse resp onse)throws ServletException, IOException {doGet(request, response);}}。

jsp页面验证码

jsp页面验证码

AJAX+jsp无刷新验证码实例(完整代码)1.login.jsp<%@ pagelanguage="java"contentType="text/html;charset=gb2312"import = "java.util.*"import = "java.sql.*"import = "java.text.*"import = "java.io.*"%><%@ include file="../conn.jsp"%><%request.setCharacterEncoding("gb2312");%><%String username=request.getParameter("name");String pass=request.getParameter("pws");String num=request.getParameter("num");String random=(String)session.getAttribute("random");if(num!=null&&random!=null){if(num.equals(random)){Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery("select * from admin where admin='"+username+"' and pass='"+pass+"'");if(rs.next()){String id=rs.getString("id");session.setAttribute("id",id);response.sendRedirect("admin.jsp");}rs.close();stmt.close();conn.close();}}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>两岸咖啡</title><link href="../include/style.css" rel="stylesheet" type="text/css" /><script src="net.js"></script><script type="text/javascript">var times=0;function subform(){var gtext=this.req.responseText;var info=document.getElementById("info");if(gtext.indexOf("validate_successful")!=-1){//info.innerHTML="<font color=green>验证码通过</font>";document.forms["form"].submit();//当得到的值表示合法,则验证码通过。

JSP图片验证码

JSP图片验证码

code.jspview plaincopy to clipboardprint?1.<%@ page language="java" pageEncoding="GBK" contentType="image/jpeg" %>2.<%@ page import= "java.awt.* , java.awt.geom.* , java.awt.image.* ,javax.imageio.*, java.awt.font.*" %>3.<%!4.//随机获取一个字母5.String randChar()6.{7.int num = (int)(Math.random()*26)+65;8.char c = (char)num;9.return String.valueOf(c);10.}11.//随机颜色12.Color randColor()13.{14.int r= (int)(Math.random()*256);15.int g= (int)(Math.random()*256);16.int b= (int)(Math.random()*256);17.return new Color(r,g,b);18.}19.//输出一个字符20.void printChar(int x , int y,char code,Graphics2D g2)21.{22.String strCode = String.valueOf(code);23.AffineTransform at = AffineTransform.getTranslateInstance(x,y);24.FontRenderContext frc = new FontRenderContext(at,true,true);25.TextLayout tl = new TextLayout(strCode,newFont("Arial",Font.BOLD+Font.ITALIC,30),frc);26.Shape sha=tl.getOutline(at);27.g2.setColor(randColor());28.g2.setStroke(new BasicStroke(3.0f));29.g2.draw(sha);30.g2.setColor(Color.white);31.g2.setStroke(new BasicStroke(0));32.g2.fill(sha);33.}34.%>35.<%36.//图像大小37.int width = 100;38.int height = 35;39.40.//验证字符41.String strCode =(int)(Math.random()*10)+randChar()+(int)(Math.random()*10)+randChar();42.43.//创建图像44.BufferedImage img = newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);45.46.Graphics g = img.getGraphics();47.Graphics2D g2 = (Graphics2D)g;48.49.//绘制背景色50.g.setColor(Color.white);51.g.fillRect(0,0,width,height);52.53.//绘制黑边54.g.setColor(Color.black);55.g.drawRect(0,0,width-1,height-1);56.57.//绘制30条干绕线58.for(int j=1;j<=30;j++)59.{60.int x1 = (int)(Math.random()*width/4);61.int x2 = (int)(Math.random()*width) + x1;62.int y1 = (int)(Math.random()*height);63.int y2 = (int)(Math.random()*height);64.g2.setColor(randColor());65.g2.setStroke(new BasicStroke(1.5f));66.g2.drawLine(x1,y1,x2,y2);67.}68.69.//绘制文本70.for(int i=0;i<strCode.length();i++)71.{72.printChar(20*i+10 , 28+(i%2==0 ? 3:-3),strCode.charAt(i),g2);73.}74.75.//写入session76.session.setAttribute("code",strCode);77.78.//输出图像79.g.dispose();80.ImageIO.write(img,"jpeg",response.getOutputStream());81.out.clear();82.out = pageContext.pushBody();83.%>使用方法:<img src="code.jsp" alt="验证码" title="点击更换图片" />因为验证码写入了session,所以使用时,只需从session中取出来进行比较即可。

jsp登录验证代码

jsp登录验证代码
连接数据库的Javabean:sqlbean.java
package database;
importjava.sql.*;
public classsqlbean{
public Stringquery_statement;
publicResultSetresult=null;
public Connectionconn;
Randomrandom= new Random();
if(fc>255)fc=255;
if(bc>255)bc=255;
intr=fc+random.nextInt(bc-fc);
intg=fc+random.nextInt(bc-fc);
intb=fc+random.nextInt(bc-fc);
</TD>
</TR>
<tr>
<td height="54" align="center">认证码:</td>
<td width="181" height=54>
<input type=text name=randmaxlength=4 value="" size=6>
&nbsp;&nbsp;
<imgborder=1src="image.jsp">
%>
login.jsp用于进入登陆界面:
<%@ pagecontentType="text/html;charset=gb2312" language="java"errorPage="" %>

Java生成验证码原理(jsp)

Java生成验证码原理(jsp)

Java⽣成验证码原理(jsp)验证码的作⽤: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全⾃动区分计算机和⼈类的图灵测试)的缩写,是⼀种区分⽤户是计算机还是⼈的公共全⾃动程序,可以防⽌:恶意破解密码、刷票、论坛灌⽔、有效防⽌某个⿊客对某⼀特定注册⽤户,⽤特定程序暴⼒破解⽅式进⾏不断的登录尝试。

实际上验证码是现在很多⽹站通⾏的⽅式,我们利⽤⽐较简易的⽅式实现了这个功能。

第⼀代:标准验证码这⼀代验证码是即是我们常见的图形验证码、语⾳验证码,基于机器难以处理复杂的计算机视觉及语⾳识别问题,⽽⼈类却可以轻松的识别来区分⼈类及机器。

这⼀代验证码初步利⽤了⼈类知识容易解答,⽽计算机难以解答的机制进⾏⼈机判断。

下⾯这种验证码就是第⼀代Java 中⽣成验证码,⼀个.java就可以了ValidateCodeServlet.javapackage com.hpe.servlet;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("/ValidateCodeServlet")public class ValidateCodeServlet extends HttpServlet {private static final long serialVersionUID = 1L;public ValidateCodeServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 响应头信息response.setHeader("Pragma", "No-Cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expries", 0);// 随机数⽣成类Random random = new Random();// 定义验证码的位数int size = 5;// 定义变量保存⽣成的验证码String vCode = "";char c;// 产⽣验证码for (int i = 0; i < size; i++) {// 产⽣⼀个26以内的随机整数int number = random.nextInt(26);// 如果⽣成的是偶数,则随机⽣成⼀个数字if (number % 2 == 0) {c = (char) ('0' + (char) ((int) (Math.random() * 10)));// 如果⽣成的是奇数,则随机⽣成⼀个字母} else {c = (char) ((char) ((int) (Math.random() * 26)) + 'A');}vCode = vCode + c;}// 保存⽣成的5位验证码request.getSession().setAttribute("vCode", vCode);// 验证码图⽚的⽣成// 定义图⽚的宽度和⾼度int width = (int) Math.ceil(size * 20);int height = 50;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 获取图⽚的上下⽂Graphics gr = image.getGraphics();// 设定图⽚背景颜⾊gr.setColor(Color.WHITE);gr.fillRect(0, 0, width, height);// 设定图⽚边框gr.setColor(Color.GRAY);gr.drawRect(0, 0, width - 1, height - 1);// 画⼗条⼲扰线for (int i = 0; i < 5; i++) {int x1 = random.nextInt(width);int y1 = random.nextInt(height);int x2 = random.nextInt(width);int y2 = random.nextInt(height);gr.setColor(randomColor());gr.drawLine(x1, y1, x2, y2);}// 设置字体,画验证码gr.setColor(randomColor());gr.setFont(randomFont());gr.drawString(vCode, 10, 22);// 图像⽣效gr.dispose();// 输出到页⾯ImageIO.write(image, "JPEG", response.getOutputStream());}// ⽣成随机的颜⾊private Color randomColor() {int red = r.nextInt(150);int green = r.nextInt(150);int blue = r.nextInt(150);return new Color(red, green, blue);}private String[] fontNames = { "宋体", "华⽂楷体", "⿊体", "微软雅⿊", "楷体_GB2312" }; private Random r = new Random();// ⽣成随机的字体private Font randomFont() {int index = r.nextInt(fontNames.length);String fontName = fontNames[index];// ⽣成随机的字体名称int style = r.nextInt(4);int size = r.nextInt(3) + 24; // ⽣成随机字号, 24 ~ 28return new Font(fontName, style, size);}}直接运⾏Java⽣成的结果:在jsp⽹页上显⽰的效果:jsp代码:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="Expires" content="0"><title>login</title><link href="css/login.css" type="text/css" rel="stylesheet"><script type="text/javascript">function $(id){return document.getElementById(id);}function changeCode(){$("code").src = "ValidateCodeServlet?a="+new Date();}</script></head><body><div class="login"><div class="message">欢迎登录</div><hr class="hr15"><div id="darkbannerwrap"></div><form method="post"><input name="action" value="login" type="hidden"> <inputname="username" placeholder="⽤户名" required="" type="text"><hr class="hr15"><input name="password" placeholder="密码" required="" type="password"><hr class="hr15"><input name="check_code" placeholder="验证码" required="" type="text"style="width: 30%;"> <img class="img_code"src="ValidateCodeServlet" id="code" /> <a class="a_code"href="javascript:changeCode()">换⼀张</a><hr class="hr15"></form></div> </body> </html>。

图形验证码的两种实现方式

图形验证码的两种实现方式

图形验证码的两种实现⽅式情形⼀:图形验证码跟短信验证码⼀起,只需要将后台提供的动态链接填到(id="img")的src中即可⽣成动态验证码。

然后,在需要请求接⼝的地⽅,只需把(id="imgCode")中⽤户输⼊的信息通过ajax传给后台,验证验证码是否正确。

原理(后台):后台通过session存储图⽚上的字符串,和之后前台请求过来的带的输⼊的字符串参数,做⽐较,判断是否⼀样。

<!doctype html><html><head><meta charset="UTF-8"><title>图形验证码</title></head><body><form><div class="imgCodeBox"><label for="imgCode">图形验证码</label><input type="text" placeholder="请输⼊验证码" id="imgCode"><img src="" id="img"></div></form></body></html>情形⼆:⽤cavas,但是没有安全性,考虑到实⽤性的话,还是⽤情形⼀的好<!doctype html><html><head><meta charset="UTF-8"><title>测试</title></head><body><canvas id="canvas" width="120" height="40"></canvas><a href="#" id="changeImg">看不清,换⼀张</a><script>/**⽣成⼀个随机数**/function randomNum(min,max){return Math.floor( Math.random()*(max-min)+min);}/**⽣成⼀个随机⾊**/function randomColor(min,max){var r = randomNum(min,max);var g = randomNum(min,max);var b = randomNum(min,max);return "rgb("+r+","+g+","+b+")";}drawPic();document.getElementById("changeImg").onclick = function(e){e.preventDefault();drawPic();}/**绘制验证码图⽚**/function drawPic(){var canvas=document.getElementById("canvas");var width=canvas.width;var height=canvas.height;var ctx = canvas.getContext('2d');ctx.textBaseline = 'bottom';/**绘制背景⾊**/ctx.fillStyle = randomColor(180,240); //颜⾊若太深可能导致看不清ctx.fillRect(0,0,width,height);/**绘制⽂字**/var str = 'ABCEFGHJKLMNPQRSTWXY123456789';for(var i=0; i<4; i++){var txt = str[randomNum(0,str.length)];ctx.fillStyle = randomColor(50,160); //随机⽣成字体颜⾊ctx.font = randomNum(15,40)+'px SimHei'; //随机⽣成字体⼤⼩var x = 10+i*25;var y = randomNum(25,45);var deg = randomNum(-45, 45);//修改坐标原点和旋转⾓度ctx.translate(x,y);ctx.rotate(deg*Math.PI/180);ctx.fillText(txt, 0,0);//恢复坐标原点和旋转⾓度ctx.rotate(-deg*Math.PI/180);ctx.translate(-x,-y);}/**绘制⼲扰线**/for(var i=0; i<8; i++){ctx.strokeStyle = randomColor(40,180);ctx.beginPath();ctx.moveTo( randomNum(0,width), randomNum(0,height) );ctx.lineTo( randomNum(0,width), randomNum(0,height) );ctx.stroke();}/**绘制⼲扰点**/for(var i=0; i<100; i++){ctx.fillStyle = randomColor(0,255);ctx.beginPath();ctx.arc(randomNum(0,width),randomNum(0,height), 1, 0, 2*Math.PI);ctx.fill();}}</script></body></html>情形⼆转⾃:https:///meishuixingdeququ/article/details/52386542情形三、⽤js产⽣随机数实现1、创建图形码容器<label class="myLabel">图形码:<input type = "button" id="code" onclick="createCode()" style="border: 0;background-color: transparent;padding: 0;"/> </label>2、产⽣验证码并在页⾯加载时和点击时调⽤ // 图形验证码var code ; //在全局定义验证码//产⽣验证码window.onload = function createCode(){code = "";var codeLength = 4;//验证码的长度var checkCode = document.getElementById("code");var random = new Array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//随机数for(var i = 0; i < codeLength; i++) {//循环操作var index = Math.floor(Math.random()*36);//取得随机数的索引(0~35)code += random[index];//根据索引取得随机数加到code上}checkCode.value = code;//把code值赋给验证码}。

jsp实现简单图片验证码功能

jsp实现简单图片验证码功能

jsp实现简单图⽚验证码功能本⽂实例为⼤家分享了jsp实现简单图⽚验证码的具体代码,供⼤家参考,具体内容如下⼀、实现的功能分析(1)在登陆页⾯加验证码的功能,起到⼀定的安全性。

在输⼊正确的验证码,⽤户名和密码的情况下,才可以实现登录。

(2)实现查询数据库的功能。

在登陆后的页⾯中,显⽰⽤户名和密码,并且设置有⼀个超链接,实现查询数据库的功能。

(3)代码核⼼是:随机⽣成验证码,并且显⽰在页⾯上。

同时要和输⼊框中的输⼊验证码进⾏校验。

(4)主页⾯使⽤img标签的src属性引⼊验证页⾯的jsp⽂件。

(5)验证码的实现页⾯使⽤BufferedImage类的⽅法产⽣图⽚。

(6)使⽤Graphics类的各种⽅法实现验证码的构成。

⼆、代码实现(1)登录页⾯:index.jsp⽂件。

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>登录页⾯</title></head><body><form action="LoginServlet" method="post">⽤户名:<input name="username" type="text" value=""/><br/><br/>密码:<input name="password" type="password" value=""/><br/><br/>验证码: <input type="text" name="checkCode" height="20px " value=""/><img src="CodeServlet"/><span>${error_code}</span><br/><input type="submit" value="提交"></form></body></html>(2)登录后的页⾯:user.jsp⽂件。

js逆向验证码验证原理

js逆向验证码验证原理

js逆向验证码验证原理
JavaScript逆向验证码验证原理主要涉及到对网页中的验证码机制进行解析和逆向工程,从而获取到验证码的生成、加密和验证方式。

以下是一些常见的验证码验证原理及其逆向方法:
1. 图片验证码:这种验证码通常以图片的形式出现,用户需要识别图片中的信息(如字母、数字、图案等)并输入到表单中。

对于这类验证码,逆向过程通常包括识别图片中的信息,可以使用图像识别技术(如OCR)或者机器学习算法来实现。

2. 滑动验证码:这种验证码要求用户按照指定的路径或轨迹滑动鼠标或触摸屏来完成验证。

逆向这类验证码需要分析滑动轨迹的生成和验证方式,可以通过模拟滑动操作并生成相应的轨迹数据来绕过验证。

3. 逻辑验证码:这种验证码要求用户解答一些逻辑问题或进行简单的数学计算。

逆向这类验证码需要理解问题的逻辑和计算方法,可以通过编写程序来自动解答问题。

在逆向验证码的过程中,通常需要使用一些工具和技术,如浏览器开发者工具、网络抓包工具、JavaScript调试器等。

这些工具可以帮助分析网页的结构和行为,定位验证码相关的代码和数据,以及模拟用户操作进行验证。

需要注意的是,逆向验证码验证原理可能涉及到法律和道德问题。

在没有得到合法授权的情况下,对网站进行逆向工程可能违反相关法律法规和道德准则。

因此,在进行相关操作时,请务必遵守法律法规和道德规范。

jsp+servlet+javaBean操作验证码(简单,复制即用)

jsp+servlet+javaBean操作验证码(简单,复制即用)

先定义一个RandCode类package util;import java.util.Random;public class RandCode {String code="";public RandCode(){Random rand = new Random();Stringtmp="@ABCDEFKLMNPghijkmnopqyz0123rsQRSTUVWXYZabcdeGHI Jftuvwx456789";code="";for(int i=0; i<4; i++){int index = rand.nextInt(tmp.length());code+=tmp.substring(index, index+1);}}public String getCode() {return code;}}在servlet中产生图片RandCode yzm = new RandCode();BufferedImage bi=new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB);Graphics g = bi.getGraphics();g.setColor(new Color(120,200,50));g.setFont(new Font("Tw Cen MT",Font.ROMAN_BASELINE,24));g.fillRect(0, 0, 80, 30);//设置随机验证码字符串g.setColor(Color.blue);g.drawString(yzm.getCode(), 0, 20);//将验证码保存在session对象中request.getSession().setAttribute("yzm",yzm.getCode ());//将生成的图片以jpg格式发送到客户端ImageIO.write(bi,"JPG",response.getOutputStream());在jsp端验证码:<input type="text"name="yzm"><img alt="看不清,单击换一张"src="yzmServlet"onclick="this.src=yzmServlet">提交后验证的servlet//得到用户在输入框输入的验证码String yzmInput=request.getParameter("yzm");//得到随机产生的验证码StringyzmRandom=(String)request.getSession().getAttribute(" yzm");//忽略大小写的比较if(yzmRandom.equalsIgnoreCase(yzmInput)){ //验证码正确跳转到你想要去的地方response.sendRedirect("login.jsp");}else{//验证码错误。

JSP页面跳转方法大全

JSP页面跳转方法大全
Toxicology is an exciting, innovative and diversified field that
is毒ser理vin学g s在cie社nc会e a可nd持the续co发mm展un中ity起at着lar不ge.可Fe替w 代 dapis的pcliip重calint要ieosn角scaa色nt tph和oeins作tamto用ebto!imtheb. aTsoixcicsoclioegnyc-etsheansdtuddiyreocftthe
2、毒物分类: 内源性毒物
外源性毒物
内源性毒物:是指在机体内形成的毒物 Nhomakorabea主要是机体 内代谢产物。
人体自由自产生的途径
外源化学物(Xenobiotics)
(狭义): 在人类生活环境中存在、可能与机体既 接触并进入机体,在体内呈现一定生物学作用。它们 并非人体组成部分,也非人体所需营养物质,也不是 维持正常生理功能和生命所必需的物质。
从机制研究分:细胞毒理学、遗传毒理学、膜毒理学、 生化毒理学、分子毒理学。
从毒物作用时相/过程分:毒代动力学和毒效动力学。
综合性、交叉性、应用性
课程的性质与地位
• 性质
• 基础学科:与其他学科尤其是生命学科广泛联系并且 相互渗透;
• 应用学科:与经济建设、人民生活和生态环境保护密 切相关。
它不仅是一门学科,更是一门艺术!
科学性:是毒理学研究中观察和收集资料,即获得论据和事实; 艺术性:是指利用这些毒性资料来预测对人群、动物和其他环境生物的 潜在危害而形成假说并外推的过程。
地位
• 有人把它称作一个“警察”学科,既要对进入环境的各类化学品签发护照, 又要对进入环境的化学品的危害性进行评价。

JSP验证码大全之验证码使用与乱码解决

JSP验证码大全之验证码使用与乱码解决

JSP验证码大全之验证码使用与乱码解决2009-06-22 14:51 以上两篇文章的内容介绍了有关JSP中产生数字验证码跟中文验证码的源代码并做了分析,本文中介绍如何对以上产生的数字跟中文验证码进行使用,以及如何解决中文验证码的乱码无法正确验证的问题。

对验证码的使用分为两个部分,分别为验证码的调用和验证过程,以下分别做说明介绍。

三、在JSP中调用验证码使用验证码直接在图片处调用产生验证码的JSP文件即可,同时在刷新验证码按钮处的js代码中使用JSP验证码文件,页面源码如下。

<form id="dForm" method=post action="val.jsp"><ul class="sFrm"><li><b></b><img id="code" border=0 src="Num.jsp"/><input type="button" value="看不清,换一张" onClick="document.getElementById('code').src='ColorChinese.jsp'"><div class="clear0"></div></li> <li><b>验证码</b><input type="text" name="input" maxlength=8 value="" styleClass="sIpt itemFm "><div class="clear0"></div></li><li class="bar"><b></b><input type="submit" value="验证测试" styleClass="logbtn3"></li></ul></form>四、在JSP中验证码的验证过程以及中文乱码处理获取用户输入的验证码并与Session中的验证码比较,相同即通过,否则拒绝,对于JSP中中文验证码的处理注意要在页面中定义JSP页面编码跟获取Session的字符编码一致,此处使用的是统一的GB2312编码,否则将出现验证码无法成功验证的情况。

在JSP页面中动态生成图片验证码的方法实例

在JSP页面中动态生成图片验证码的方法实例

在JSP页⾯中动态⽣成图⽚验证码的⽅法实例在JSP页⾯中动态⽣成图⽚验证码<%@ page language="java" pageEncoding="UTF-8"%><%@ pageimport="java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*" %><%@ taglib /tags-bean">/tags-bean"prefix="bean" %><%@ taglib /tags-html">/tags-html"prefix="html" %><%@ taglib /tags-logic">/tags-logic"prefix="logic" %><%@ taglib /tags-tiles">/tags-tiles"prefix="tiles" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html lang="true"><head><html:base /><title>MyJsp.jsp</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"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" >--></head><body><h3>在jsp页⾯⽣成验证码</h3><hr/><%//out.clear();//response.setContentType("image/jpeg");//设置响应类型//response.addHeader("pragma","NO-cache");//response.addHeader("Cache-Control","no-cache");//response.addDateHeader("Expries",0);int width=400, height=30;//图⽚的⼤⼩(宽和⾼)//构架画布,第⼀个参数表⽰画布的宽,第⼆个参数表⽰画布的⾼,第三个参数的含义有待确定BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();//实例化画图对象//以下设置背景⾊g.setColor(Color.yellow);Font DeFont=new Font("宋体", Font.ITALIC, 20);g.setFont(DeFont);//将已经设置好的背景颜⾊填充到指定的画布区域g.fillRect(0,0, width, height);//置字体⾊g.setColor(Color.blue);int x=10,y=10,xl=550,yl=15;g.drawLine(x,y,x+xl,y+yl);//在画布中画椭圆形,参数为椭圆的坐标,⽤于确定椭圆的⼤⼩g.drawOval(0,10,200,10);//在画布上输出⽂字信息,第⼀个参数表⽰要显⽰的⽂字,第⼆和第三个参数表⽰起始点的X、Y坐标g.drawString("想要输出的⽂字-我是陈杉",70,20);g.dispose();ServletOutputStream outStream = response.getOutputStream();JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream);encoder.encode(image);outStream.close();%></body></html:html>--将该⽂件保存为pic.jsp,该⽂件负责⽣成图⽚!如果要在其他的页⾯显⽰该图⽚只需要写上<img src="pic.jsp"/>仅此⼀句就ok了,适⽤于⽣成各种验证码!总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。

Jsp常用技巧图片验证码

Jsp常用技巧图片验证码

Jsp常用技巧:图片验证码2007-12-28 21:08:09 已被阅读:371 发表评论思路:图片验证码的实现主要的技术点是如何生成一个图片。

生成图片可以使用java.awt包下的类来实现。

我们先写一个简单的生成图片的程序HelloImage.java。

以下是代码部分。

package com.vogoal.test;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/*** @author SinNeR@* create a image*/public class HelloImage {public static void main(String[] args){BufferedImage image = new BufferedImage(80, 25,BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(new Color(255,255,255));g.fillRect(0, 0, 80, 25);g.setColor(new Color(0,0,0));g.drawString("HelloImage",6,16);g.dispose();try{ImageIO.write(image, "jpeg", new File("C:\\helloImage.jpeg"));}catch(IOException e){e.printStackTrace();}}}编译后,在DOS下调用这个程序,正常情况下,会在C盘根目录下生成一张名字helloImage.jpeg为的图片。

JSP实现登录功能之添加验证码

JSP实现登录功能之添加验证码

JSP实现登录功能之添加验证码jsp登陆验证,⽹页登陆验证带验证码校验,登录功能之添加验证码part_1:专门⽤于⽣成⼀个验证码图⽚的类:VerificationCode.Javapackage cn.mike.javase.test;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;import org.junit.Test;/*** @author : Administrator* @function : 这是⽤来测试随机⽣成验证码图⽚的类;*/public class VerificationCode {/*** 单元测试,试⼀下能不能⾃动⽣成验证码图⽚*/// 这个函数是单元测试时使⽤的,这⾥private⼀下外⾯就调⽤不到了;/* @Test *//* public */private void test_fun() {VerificationCode vc = new VerificationCode();BufferedImage image = vc.getImage();try {// ⽣成验证码图⽚,并保存到指定的路径VerificationCode.output(image, new FileOutputStream(new File(".\\image\\vcode_2.jpg")));} catch (FileNotFoundException e) {e.printStackTrace();}// 将随机⽣成的⽂本内容输出到控制台,⽤于校验System.out.println(vc.getText());}private int w = 70;// 宽private int h = 35;// ⾼private String text;// ⽂本内容(验证码字符串)private Random r = new Random();private String[] fontNames = { "宋体", "华⽂楷体", "⿊体", "微软雅⿊", "楷体_GB2312" };// 随机字符集合中不包括0和o,O,1和l,因为这些不易区分private String codes = "23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYXZ";// 验证码图⽚的背景⾊:⽩⾊private Color bgColor = new Color(255, 255, 255);/*** 返回⼀个验证码图⽚buffer对象:BufferedImage*/public BufferedImage getImage() {BufferedImage image = createImage();// 获取绘图环境(画笔⼯具)Graphics2D g2 = (Graphics2D) image.getGraphics();// sb :⽤来保存验证码字符串⽂本内容StringBuilder sb = new StringBuilder();for (int i = 0; i < 4; ++i) {// 随机⽣成4个字符String s = randomChar() + "";sb.append(s);float x = i * 1.0F * w / 4;g2.setFont(randomFont());g2.setColor(randomColor());g2.drawString(s, x, h - 5);}this.text = sb.toString();// 记录验证码⽂本内容drawLine(image);// 画⼲扰线return image;}/*** @return 获取验证码⽂本内容*/public String getText() {return text;}/*** @param image* @param out* 将⽂本写到指定的输出流。

图形验证码的“另类”用法

图形验证码的“另类”用法

龙源期刊网
图形验证码的“另类”用法
作者:
来源:《电脑报》2018年第39期
攻防实验室
这里有最新的黑客研究成果,这里有黑客的最新“黑科技”,这里有权威解读,正所谓知己知彼方能百战不殆。

要想全面抵御黑客的攻击,就必须知道黑客的最新动态。

欢迎志同道合的朋友来投稿,投稿邮箱:285845949@。

图形验证码大家都很熟悉,用来防止不怀好意的人用程序批量注册马甲,然后進行刷票、论坛灌水等,于是就有黑客研究如何破解图形验证码,破解与反破解的斗争一直存在。

最近,有黑客意外发现图形验证码能用来攻击网站,在极端情况下甚至可能令网站崩溃,这是怎么回事呢?
原来不同网站的图形验证码都对应着一个链接,以知名的PHPCMS为例,右击图形验证码选择复制链接,就可以得到一个长长的链接,链接中“code_len=”代表的是图形验证码中显示的字符个数,“font_size=”代表的是图形验证码中显示的字符大小,“width=”代表的是图形验证码中的宽是多少,“height=”代表的是图形验证码的高是多少,=后面的数值是可以修改的,如果将font_size、width和height的参数都修改为10000甚至更高,网站就会不停地处理用户所请求的图片,从而消耗更多的资源,如果黑客用同样的手法发动批量攻击,从理论上来说就可以瘫痪网站。

当然,这种攻击也是有限制的,那就是网站没有对图形验证码的长宽等参数进行限制,也没有对图形验证码的大小进行限制,否则的话这种攻击就不能成功。

预防的方法也很简单,使用固定大小的图形验证码即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Jsp常用技巧:图片验证码2007-12-28 21:08:09 已被阅读:371 发表评论思路:图片验证码的实现主要的技术点是如何生成一个图片。

生成图片可以使用java.awt包下的类来实现。

我们先写一个简单的生成图片的程序HelloImage.java。

以下是代码部分。

package com.vogoal.test;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/*** @author SinNeR@* create a image*/public class HelloImage {public static void main(String[] args){BufferedImage image = new BufferedImage(80, 25,BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(new Color(255,255,255));g.fillRect(0, 0, 80, 25);g.setColor(new Color(0,0,0));g.drawString("HelloImage",6,16);g.dispose();try{ImageIO.write(image, "jpeg", new File("C:\\helloImage.jpeg"));}catch(IOException e){e.printStackTrace();}}}编译后,在DOS下调用这个程序,正常情况下,会在C盘根目录下生成一张名字helloImage.jpeg为的图片。

图片上有文字HelloImage。

简单介绍下生成图片的流程:1.建立BufferedImage对象。

指定图片的长度宽度和色彩。

BufferedImage image = new BufferedImage(80,25,BufferedImage.TYPE_INT_RGB);2.取得Graphics对象,用来绘制图片。

Graphics g = image.getGraphics();3.绘制图片背景和文字。

4.释放Graphics对象所占用的资源。

g.dispose();5.通过ImageIO对象的write静态方法将图片输出。

ImageIO.write(image, "jpeg", new File("C:¥¥helloImage.jpeg"));知道了图片的生成方法,剩下的问题就是如何将随机数生成到页面上了。

要显示图片,我们只要将生成的图片流返回给response对象,这样用户请求的时候就可以得到图片。

而一个jsp页面的page参数的contentType属性可以指定返回的response对象的形式,我们平时的jsp页面中设定的contentType是text/html,所以会被以HTML文件的形式读取分析。

如果设定为image/jpeg,就会被以图片的形式读取分析。

确定了这点后就可以着手实现。

1.修改生成图片的类,添加生成随机字符串的方法,并取得用户传过来的response对象将图片流输出到response对象中。

同时为了更友好和可订制,添加了一个构造函数,可以修改图片验证码的长度,以及验证码的码字范围。

并且可以设定验证码的背景色。

(用户使用时可以设定验证图片的背景色与页面的背景色相同)2.写一个jsp文件,用来调用生成验证码图片的类。

并得到生成的验证码,存入session。

以下是生成验证码图片的类RandImgCreater。

(操作系统的原因,没有写注释,避免乱码)package com.vogoal.util.img;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.http.HttpServletResponse;/*** @author SinNeR* * image check creater*/public class RandImgCreater {private static final String CODE_LIST = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; private HttpServletResponse response = null;private static final int HEIGHT = 20;private static final int FONT_NUM = 4;private int width = 0;private int iNum = 0;private String codeList = "";private boolean drawBgFlag = false;private int rBg = 0;private int gBg = 0;private int bBg = 0;public RandImgCreater(HttpServletResponse response) {this.response = response;this.width = 13 * FONT_NUM + 12;this.iNum = FONT_NUM;this.codeList = CODE_LIST;}public RandImgCreater(HttpServletResponse response,int iNum,String codeList) { this.response = response;this.width = 13 * iNum + 12;this.iNum = iNum;this.codeList = codeList;}public String createRandImage(){BufferedImage image = new BufferedImage(width, HEIGHT,BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();Random random = new Random();if ( drawBgFlag ){g.setColor(new Color(rBg,gBg,bBg));g.fillRect(0, 0, width, HEIGHT);}else{g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, HEIGHT);for (int i = 0; i < 155; i++) {g.setColor(getRandColor(140, 200));int x = random.nextInt(width);int y = random.nextInt(HEIGHT);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}}g.setFont(new Font("Times New Roman", Font.PLAIN, 18));String sRand="";for (int i=0;i<iNum;i++){int rand=random.nextInt(codeList.length());String strRand=codeList.substring(rand,rand+1);sRand+=strRand;g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));g.drawString(strRand,13*i+6,16);}g.dispose();try{ImageIO.write(image, "JPEG", response.getOutputStream());}catch(IOException e){}return sRand;}public void setBgColor(int r,int g,int b){drawBgFlag = true;this.rBg = r;this.gBg = g;this.bBg = b;}private Color getRandColor(int fc, int bc) {Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}}以下是调用生成验证码图片的类的jsp文件:<%@ page contentType="image/jpeg" import="com.vogoal.util.img.*" %> <%response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);RandImgCreater rc = new RandImgCreater(response);//RandImgCreater rc = new RandImgCreater(response,8,"abcdef");//rc.setBgColor(100,100,100);String rand = rc.createRandImage();session.setAttribute("rand",rand);%>将java程序编译后得到的class,放到Tomcat自己的web应用的class的目录下,并写一个测试程序。

相关文档
最新文档