`
sgl124764903
  • 浏览: 174740 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
社区版块
存档分类
最新评论

JavaEE 验证码的使用

阅读更多
package org.xawl.jsj;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Iterator;

 

import javax.imageio.IIOImage;

import javax.imageio.ImageIO;

import javax.imageio.ImageTypeSpecifier;

import javax.imageio.ImageWriteParam;

import javax.imageio.ImageWriter;

import javax.imageio.stream.ImageOutputStream;

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;

 

public class ValidateCodeServlet extends HttpServlet {

       //将来存放验证码值的session的key值

       public static final String VALIDATE_CODE_KEY = "ValidateCode";

 

       //请求servlet的时的被调方法

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

 

//设置文档的内容类型为jpeg类型,

//从而在浏览的时候告知浏览器这是一个图片类型

response.setContentType("image/jpeg");

              //生成验证码,保存在session中

              HttpSession session = request.getSession();

             

//调用下面的generateString方法,

//生成一个4位长的每位为0-9的随机字符串

 

              String code = generateString();

              session.setAttribute(VALIDATE_CODE_KEY, code);

 

              //生出内存图片

              BufferedImage image = generateImage(code);

 

              //输出图片

              outputImage(image, response.getOutputStream());

       }

 

 

       //往页面输出的方法

       private void outputImage(BufferedImage image, ServletOutputStream out)

                     throws IOException {

              ImageWriter writer = null;

              //下面进行对图片格式的一些修改

              ImageTypeSpecifier type =

ImageTypeSpecifier.createFromRenderedImage(image);

              Iterator iter = ImageIO.getImageWriters(type, "jpg");

              if (iter.hasNext()) {

                     writer = (ImageWriter) iter.next();

              }

             

              IIOImage iioImage = new IIOImage(image, null, null);

              ImageWriteParam param = writer.getDefaultWriteParam();

 

              param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

              //控制图片质量,1.0最高

              param.setCompressionQuality(1.0F);

              //创建输出流

              ImageOutputStream outputStream = ImageIO.createImageOutputStream(out);

              //将构建好的图片输出流写入到页面中

              writer.setOutput(outputStream);

              writer.write(null, iioImage, param);

       }

 

      

       //用来生成随机字符串的方法

private String generateString() {

              int a = (int) (Math.random() * 10);

              int b = (int) (Math.random() * 10);

              int c = (int) (Math.random() * 10);

              int d = (int) (Math.random() * 10);

              return "" + a + b + c + d;

       }

      

       //生成图片的方法

       private BufferedImage generateImage(String code) {

              //设置图片信息,宽,高,具有 8 位 RGB 颜色分量的图像

              BufferedImage image = new BufferedImage(100, 30,

                            BufferedImage.TYPE_INT_RGB);

              //得到画笔

              Graphics g = image.getGraphics();

              //产生背景图片

              g.setColor(Color.white);

              //画一个矩形框

              g.fillRect(1, 1, 98, 28);

              //添加一些干扰的线条

              for (int i = 0; i < 20; i++) {

                     g.setColor(generateColor());

                     int x1 = (int) (Math.random() * 100);

                     int y1 = (int) (Math.random() * 30);

                     int x2 = (int) (Math.random() * 100);

                     int y2 = (int) (Math.random() * 30);

                     g.drawLine(x1, y1, x2, y2);

              }

              //画数字

              //为了得到不同效果的随机字符串,这里采用一个一个字符串的画。

              //这样可以使其颜色或者其他信息有所不同

 

              g.setFont(new Font("IMPACT", Font.PLAIN,

                            20 + (int) (Math.random() * 10)));

              g.setColor(generateColor());

              g.drawString(code.charAt(0) + "", 5, 28);

 

              g.setFont(new Font("IMPACT", Font.PLAIN,

                            20 + (int) (Math.random() * 10)));

              g.setColor(generateColor());

              g.drawString(code.charAt(1) + "", 30, 28);

 

              g.setFont(new Font("IMPACT", Font.PLAIN,

                            20 + (int) (Math.random() * 10)));

              g.setColor(generateColor());

              g.drawString(code.charAt(2) + "", 55, 28);

 

              g.setFont(new Font("IMPACT", Font.PLAIN,

                            20 + (int) (Math.random() * 10)));

              g.setColor(generateColor());

              g.drawString(code.charAt(3) + "", 80, 28);

 

              return image;//返回制作好的图像

       }

      

       //生成随机的颜色

       private Color generateColor() {

              int r = (int) (Math.random() * 180);

              int g = (int) (Math.random() * 180);

              int b = (int) (Math.random() * 180);

              return new Color(r, g, b);

       }

}

 

Servlet在web.xml中的配置:

<servlet>

    <description>This is the description of my J2EE component</description>

    <display-name>This is the display name of my J2EE component</display-name>

    <servlet-name>ValidateCodeServlet</servlet-name>

    <servlet-class>org.xawl.jsj.ValidateCodeServlet</servlet-class>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>ValidateCodeServlet</servlet-name>

    <url-pattern>/servlet/validatecode</url-pattern>

</servlet-mapping>

 

 页面代码

<%@ page language="java"  pageEncoding="gb2312" %>

 

 

<html>

  <head>

    <script type="text/javascript">

       function change(){

           var imgcode = document.getElementById("codeimg");

           imgcode.src="servlet/validatecode?"+new Date();

       }

    </script>

  </head>

  <body>

  <form action="check.jsp" method="post" >

    验证码:<img alt="" src="servlet/validatecode">    <a href="#" onclick="change();">点击更换</a> <br>

    <input type="text" name="code" >    <br>

    <input type="submit"  value="验证" >    <br>

   </form>

  </body>

</html>

 

 

 

接受提交页面:

页面代码:

<%@ page language="java"  pageEncoding="gb2312"%>

<%

String code = request.getParameter("code");

String value = session.getAttribute("ValidateCode").toString();

if(value.equals(code)){

    out.println("验证码正确");

}else{

    out.println("<font color=red>验证码不正确</font>");

}

%>

 

分享到:
评论

相关推荐

    JavaEE web项目中使用验证码

    使用验证码,增强用户体验效果,使你的网页更具有特色

    javaee超级验证码

    在这个压缩包中,很可能包含了一套完整的JavaEE验证码解决方案,包括前端展示、后端生成以及验证逻辑。 验证码通常由随机生成的字母、数字、符号组成,有时会带有扭曲或变形以增加机器识别的难度。在JavaEE环境中,...

    用JavaEE做的测试

    【JavaEE技术体系详解】 JavaEE(Java Platform, Enterprise Edition),是Java平台的企业版,主要用于构建分布式、多层的企业级应用程序。它提供了一系列标准API和服务,涵盖了Web组件、EJB(Enterprise JavaBeans...

    验证码登录模板

    j2ee, 使用servlet 进行验证码登录模板,仅适合初学javaee的同学使用j2ee, 使用servlet 进行验证码登录模板,仅适合初学javaee的同学使用j2ee, 使用servlet 进行验证码登录模板,仅适合初学javaee的同学使用j2ee, ...

    javaEE注册登录系统

    JavaEE可以通过第三方库如Google的reCAPTCHA或自定义算法生成图像验证码,用户输入正确的验证码才能完成操作。 6. **安全性考虑** - **SQL注入**:应使用预编译语句或参数化查询来避免SQL注入攻击。 - **XSS攻击*...

    JAVA实现随机图片验证码简单方法

    JAVA实现随机图片验证码简单方法.rtf

    mldn的注册验证javaee

    在IT行业中,JavaEE(Java Platform, Enterprise Edition)是一个广泛使用的服务器端开发平台,用于构建分布式、多层的企业级应用程序。本主题聚焦于"mldn的注册验证",这通常指的是用户注册功能的实现,它是任何Web...

    JavaEE全套API新版.zip

    所以这次重新上传一次,相对于上次进行了一些整理(前端后台数据库API分类),并且增加了json,java验证码,Oracle数据库api.chm,以及后端框架的api,包括hibernate,struts2,spring,mybatis,springMVC

    简单的登录验证

    简单的JavaEE登录验证,JSP与servlet编程实现:public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter(...

    JavaEE实验报告

    - **DBUtils类**:该类负责数据库的连接和关闭,使用了JDBC API,包含了静态方法来获取和关闭数据库连接。 - **下载功能**:DownLoad类是一个Servlet,用于处理音乐文件的下载请求。它从数据库获取文件信息,然后...

    javaEE简单的新闻发布系统

    课程设计:用户需要使用新闻管理功能时,需要先以管理员身份登录系统。在地址栏中输入管理员登录页面的地址,进入管理员登录页面。用户在登录页面输入用户名和密码以及随机产生的验证码,若登录失败,则清空输入,并...

    验证码生成

    在本程序中,我们关注的是基于JavaEE平台的验证码生成。JavaEE,即Java Platform, Enterprise Edition,是一个用于开发企业级应用的开源框架,包括了服务器端组件、数据库连接、Web服务等功能。在JavaEE环境中生成...

    JavaEE综合案例

    (2)验证码、购物车、聊天室(session和appliction):http://172.16.26.242:8080/zonghe2/ (3)Javabean、分页和批量删除:http://172.16.26.242:8080/zonghe3/login.html (4)数据库增删改查(servlet+mysql)...

    随机生成验证码

    4. **安全性考虑**:为了保持验证码的有效性,需要防止它们被重复使用。每次生成新的验证码时,旧的验证码应该立即失效。此外,考虑到性能和用户体验,验证码的生命周期应适当设置,比如在一段时间无操作后自动过期...

    javaEE实验指导

    - 使用`java.awt`和`javax.imageio`包中的类来生成验证码图片。 - 将生成的验证码字符串存储到`HttpServletRequest`对象的`getSession()`方法获得的`HttpSession`对象中。 - **登录验证Servlet**:编写`...

    JavaEE项目:用户信息管理系统.pdf

    4.验证码验证:在登录功能中,系统使用验证码来验证用户的输入。验证码生成后,会将其存储在Session中,并在用户登录时进行验证。如果验证码不正确,系统会提示错误信息。 5. BeanUtils使用:在登录功能中,系统...

    Java + SSM基于JavaEE的网上图书分享系统(毕业设计、课程设计使用).rar

    标题中的“Java + SSM基于JavaEE的网上图书分享系统”指的是一个使用Java技术栈,结合Spring、SpringMVC和MyBatis(SSM)框架开发的Web应用程序,旨在实现在线图书分享的功能。这个系统可以作为学生进行毕业设计或...

    JavaEE课程设计项目基于SSM框架校园宽带业务管理系统源代码.zip

    JavaEE课程设计项目基于SSM框架校园宽带业务管理系统源代码。 导入数据库文件到MySQL broadbandbusinesssys/src/main/resources/database/broadbandbusinessdb.sql 部署到tomcat既可运行启动,本地访问路径: ...

    JavaEE宿舍管理系统

    - 对于敏感操作,系统可能会采用验证码、二次确认等方式防止误操作。同时,对输入数据进行校验,防止SQL注入等安全风险。 综上所述,JavaEE宿舍管理系统是一个集成了多种技术与设计原则的综合性应用,展示了JavaEE...

    javaee登录界面

    这个项目"javaee登录界面"使用了Servlet、JSP和MySQL数据库来实现这一功能,适合初学者学习。以下是对这些关键技术点的详细说明: 1. **Servlet**: Servlet是JavaEE中用于扩展服务器功能的Java类。在这个登录系统...

Global site tag (gtag.js) - Google Analytics