`

附1:jsp验证码详解

    博客分类:
  • JSP
 
阅读更多
JSP页面末尾要添加以下两行,不行会报错:
java.lang.IllegalStateException: getOutputStream() has already been called for this response       
out.clear();
out = pageContext.pushBody();


jsp验证码生成以及刷新

关于jsp验证码生成,显示,验证和刷新:

1:四位数据的验证图片生成,用servlet实现

2: 在web.xmlli配置servlet

3:页面上显示servlet生成的图片

4: 关于验证码输入数据的验证

5: 验证码的刷新

——————————————————————–

1:四位数据的验证图片生成,用servlet实现,servlet代码如下:
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;

import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;

public class vImage extends HttpServlet {
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType(”image/jpeg”);
res.setHeader(”Pragma”, “No-cache”);
res.setHeader(”Cache-Control”, “no-cache”);
res.setDateHeader(”Expires”, 0);
HttpSession session = req.getSession();

// 在内存中创建图象
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 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);
}
}

2: 在web.xml配置servlet:

vImage
/vimage

注:注意元素在web.xml文件里的位置


3:页面上显示servlet生成的图片。
注:在需要显示验证码的地方加上这句,name在刷新验证码的时候会用到。

4: 关于验证码输入数据的验证:

验证码生成时存入了session,就是servlet里的这句session.setAttribute(”post_validate_code”, sRand);具体验证就不多说了。
5: 验证码的刷新
刷新验证码

function reloadImage(url)
{
document.form名字.pic.src = url;
}


前两个有时间参考

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

证实好用的:只一个单纯的jsp 页面直接粘过去即可。

<%@ page    
         import = "java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>    
<%@ page import = "java.io.OutputStream" %>    
<%@ page pageEncoding= "UTF-8" %>    
<%!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);    
        }%>    
<%    
                 try {    
                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);    
                OutputStream os = response.getOutputStream();    
                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(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);    
                }    
                String sRand = "" ;    
                 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 );    
                }    
                session.setAttribute( "rand" , sRand);    
                g.dispose();    
   
                ImageIO.write(image, "JPEG" , os);    
                os.flush();    
                os.close();    
                os = null ;    
                response.flushBuffer();    
                out.clear();    
                out = pageContext.pushBody();    
        } catch (IllegalStateException e) {    
                System.out.println(e.getMessage());    
                e.printStackTrace();    
        }    
%>   

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

jsp验证码的使用实例
关键字: jsp

在网上找了哈相关的代码 其大多都没有注释

为了方便学习特意整理了一分带注释的验证码的代码


    生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,服务器端刷新(用history.go(-1)也会变)

产生验证码图片的文件-----image.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(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 
    g.drawString(rand,13*i+6,16); 
} 

// 将认证码存入SESSION 
session.setAttribute("rand",sRand); 


// 图象生效 
g.dispose(); 

// 输出图象到页面 
ImageIO.write(image, "JPEG", response.getOutputStream()); 


%> 

---------------使用验证码图片的文件---------a.jsp------------------------------------ 

<%@ page contentType="text/html;charset=gb2312" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>认证码输入页面</title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="0"> 
</head> 
<body> 
<form method=post action="check.jsp"> 
<table> 
<tr> 
<td align=left>系统产生的认证码:</td> 
<td><img border=0 src="image.jsp"></td> 
</tr> 
<tr> 
<td align=left>输入上面的认证码:</td> 
<td><input type=text name=rand maxlength=4 value=""></td> 
</tr> 
<tr> 
<td colspan=2 align=center><input type=submit value="提交检测"></td> 
</tr> 
</form> 
</body> 
</html> 

-----------------验证的页面----------

验证根据需要 直接判断request中的验证码和session中的是否一致就可以了
分享到:
评论

相关推荐

    jsp验证码源码下载

    10. **安全注意事项**:尽管JSP验证码可以提供基础防护,但更高级的攻击手段(如OCR识别)可能仍能破解。因此,验证码只是多层安全措施中的一环,结合其他验证机制如IP限制、时间限制等,可以提高安全性。 以上就是...

    jsp 验证码(servlet)

    【JSP验证码(Servlet)详解】 验证码是一种常用的安全机制,用于防止自动化的恶意程序,如机器人,进行非法操作。在Web开发中,JSP(JavaServer Pages)与Servlet结合使用可以实现动态生成并验证验证码的功能。这...

    JSP验证码数字与中文

    **JSP验证码技术详解** 验证码(CAPTCHA)是一种防止机器自动操作的安全机制,它通过让用户输入图片中显示的一段文字或数字来确认用户是人类而非计算机程序。在JSP(JavaServer Pages)中,我们可以创建数字验证码...

    jsp验证码图片例子

    **JSP验证码图片详解** 验证码(CAPTCHA)是一种防止恶意自动化程序(如机器人或爬虫)进行非法操作的安全机制。在网页开发中,JSP(Java Server Pages)被广泛用于生成动态的、难以通过机器自动识别的验证码图片。...

    jsp验证码——数字

    ### jsp验证码——数字 #### 知识点详解 ##### JSP 验证码实现原理与过程 在本文档中,我们关注一个基于JavaServer Pages (JSP) 的数字验证码生成示例。此示例主要涉及到JSP页面的配置、Java图形处理库的使用以及...

    jsp教程JSP验证码代码

    【JSP验证码技术详解】 验证码(CAPTCHA)是一种防止恶意自动化程序(如机器人)滥用服务的技术,它通过向用户展示一组难以由计算机自动识别的图像或文字,要求用户输入所见内容来验证其为真实的人。在JSP(Java...

    Jsp验证码源码

    总之,理解和掌握JSP验证码的实现,不仅可以保护你的Web应用免受恶意攻击,还能帮助你更好地理解Web开发中的安全问题。通过下载、学习和实践提供的源码,你将能更深入地理解验证码技术及其在实际项目中的应用。

    JSP验证码+js验证

    **JSP验证码与JavaScript验证详解** 验证码是一种常用的安全机制,用于防止自动化的恶意程序或机器人进行非法操作,如批量注册、刷票等。在Web开发中,Java Server Pages (JSP) 和 JavaScript 是两种常见的技术,...

    jsp验证码实现

    【JSP验证码实现详解】 验证码(CAPTCHA)是一种防止机器自动操作的安全机制,它通过让用户输入图片或音频中显示的随机字符来验证用户是否为真实的人。在JSP(JavaServer Pages)中实现验证码,我们可以利用Java的...

    jsp随机验证码(图片)

    **JSP随机验证码技术详解** 验证码(CAPTCHA)是一种用于防止机器自动操作的验证机制,它通常用于网页表单,确保提交的是由真实人类而非自动化脚本完成的。在Java Web开发中,JSP(JavaServer Pages)可以用来创建...

    JSP验证码的详细资料用浏览器打开

    **JSP验证码详解** 验证码(CAPTCHA)是一种用于防止机器人或恶意程序自动操作的技术,它通过让用户完成一项小任务来证明其是人类而非自动化程序。在JSP(Java Server Pages)中,验证码的实现通常涉及到图像生成、...

    JSP验证码登录程序

    **JSP验证码登录程序详解** 验证码(CAPTCHA)是一种用于防止自动机器人或恶意脚本进行非法操作的安全机制,常用于用户登录、注册等场景。在JSP(Java Server Pages)中,结合Servlet实现验证码功能,可以有效提升...

    JSP.rar_jsp 验证码_论坛 jsp_论坛系统 JSP

    - 实现JSP验证码可能涉及到Java的图形处理技术,如使用`java.awt`和`javax.imageio`包来生成随机字符并渲染到图像上,然后将其编码为URL供客户端显示。 4. **论坛系统功能** - **查看帖子**:用户可以浏览论坛上...

    jsp用户登录验证码

    ### jsp用户登录验证码知识点详解 #### 一、概述 在Web应用开发中,为了防止自动化工具或恶意脚本对登录系统的频繁尝试,通常会在登录界面加入验证码功能。验证码(CAPTCHA)是一种用来区分人与计算机的技术手段。...

    JSP页面验证码生成图片

    ### JSP页面验证码生成图片详解 #### 一、概述 在网站登录或注册过程中,为了防止恶意登录或机器人操作,通常会使用验证码机制。本文档详细介绍了一种利用JSP技术生成验证码图片的方法。该方法通过Java后端动态...

    JSP实现验证码数字图片

    **JSP实现验证码数字图片详解** 验证码是一种常用的安全机制,用于防止自动机器人或者恶意脚本进行非法操作,如批量注册、频繁提交等。在Web开发中,JSP(JavaServer Pages)可以用来创建动态验证码图片。本文将...

    jsp验证码生成以及刷新

    jsp 验证码生成和刷新详解 jsp 验证码生成和刷新是 Web 开发中非常重要的一部分。验证码的生成和刷新可以防止机器人攻击和恶意注册。下面我们将详细介绍 jsp 验证码生成和刷新的过程。 一、四位数据的验证图片生成...

    jsp验证码

    **JSP验证码技术详解** 验证码(CAPTCHA)是一种防止恶意自动化程序(如机器人)滥用服务的验证机制。在网页开发中,JSP(JavaServer Pages)是常用的动态网页技术,可以用于生成和验证验证码。本篇文章将深入探讨...

Global site tag (gtag.js) - Google Analytics