`
357029540
  • 浏览: 735692 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Structs2实现随机验证码的过程

阅读更多
在我们做web相关的项目时,用户登录的页面是必不可少的,在用户进行页面登录时,除了用户名和密码外,我们一般情况下都会去生成一个验证码来,让用户输入用户名和密码的同时输入验证码来进行用户的登录,在这里我们为什么一般要使用验证码呢?其实道理很简单,就是防止黑客的“暴力”登录,在用户没有使用验证码的时候,黑客可以通过不断的试探用户名和密码来进行系统的登录,使用验证码过后,由于验证码是随机生成的,所以黑客使用暴力的方式进行登录是基本不会成功的,下面就来说说怎么使用SSH的时候来生成随机验证码。

      首先是书写一个生成随机验证码的类,其实这个类的实现是比较简单的,当然对于初学者或没有书写过验证码的人来说还是有那么点难度的。这个类的名字是AuthImg.java,由于使用的是Structs2进行页面与逻辑之间的转换,所以继承了Struct2的ActionSupport类。具体代码如下:



package com.ebuy.util;

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

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 验证码类
* @author kjgj
*
*/
public class AuthImg extends ActionSupport{
//设置图片验证码的字符串的字体和大小
private Font mfont = new Font("Arial Black", Font.PLAIN, 16);
//生成随机颜色
Color getRandColor(int fc,int bc){
  Random rand = new Random();
  if(fc > 255){
   fc = 255;
  }
  if(bc > 255){
   bc = 255;
  }
  int r = fc + rand.nextInt(bc - fc);
  int g = fc + rand.nextInt(bc - fc);
  int b = fc + rand.nextInt(bc - fc);
  return new Color(r, g, b);
}
public String execute() throws Exception{
  HttpServletRequest request = ServletActionContext.getRequest();
  HttpServletResponse response = ServletActionContext.getResponse();
  //防止页面缓存,保证生成的随机码都是新的
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "No-cache");
  response.setDateHeader("Expires", 0);
  response.setContentType("image/jpeg");
  //指定验证码图片大小
  int width = 100,height = 18;
  //生成一张新图片
  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(1, 1, width-1, height-1);
  g.setColor(new Color(102, 102, 102));
  g.drawRect(0, 0, width-1, height-1);
  g.setFont(mfont);
  //随机生成线条,使图片看起来更加杂乱
  g.setColor(getRandColor(160, 200));
  for(int i = 0; i < 155;i++){
   int x = random.nextInt(width - 1);
   int y = random.nextInt(height -1);
   int x1 = random.nextInt(6) + 1;
   int y1 = random.nextInt(12) + 1;
   g.drawLine(x, y, x+x1, y+y1);
  }
  for(int j = 0;j < 70;j++){
   int x = random.nextInt(width - 1);
   int y = random.nextInt(height -1);
   int x1 = random.nextInt(12) + 1;
   int y1 = random.nextInt(6) + 1;
   g.drawLine(x, y, x-x1, y-y1);
  }
  //用于保存生成的随机字符串
  String sRand = "";
  for(int k = 0;k < 6;k++){
   //取得一个随机字符
   String tmp = getRandomChar();
   sRand += tmp;
   //将生成的随机字符串添加到验证码图片上
   g.setColor(new Color(20+random.nextInt(110), 20+random.nextInt(110), 20+random.nextInt(110)));
   g.drawString(tmp, 15*k+10, 15);
  }
  //取得用户session
  HttpSession session = request.getSession(true);
  //将生成的随机码放到session中
  session.setAttribute("rand", sRand);
  g.dispose();
  //输出验证码图片
  ImageIO.write(image, "JPEG", response.getOutputStream());
  return null;
}
//生成随机字符串的方法
private String getRandomChar(){
  int rand = (int)Math.round(Math.random()*2);
  long ltmp = 0;
  char ctmp = '\u0000';
  //根据rand的值来生成一个大\小写字母,数字
  switch(rand){
      //生成大写字母
     case  1:
      ltmp = Math.round(Math.random() * 25 + 65);
      ctmp = (char)ltmp;
      return String.valueOf(ctmp);
     //生成小写字母
     case  2:
      ltmp = Math.round(Math.random() * 25 + 97);
      ctmp = (char)ltmp;
      return String.valueOf(ctmp);
    //生成数字
     default:
      ltmp = Math.round(Math.random() * 9);
      return String.valueOf(ltmp);
  }
}
}




      Structs2的配置文件structs.xml的配置如下:

<constant name="struts.objectFactory" value="spring"></constant>
<package name="demo" extends="struts-default">
      <action name="authImg" class="authImg">
          <result>/welcome.jsp</result>
      </action>
   </package>



spring的配置文件applicationContext.xml的配置如下:

<bean id="authImg" class="com.ebuy.util.AuthImg" />



进行展示的welcome.jsp页面的实现如下:

验证码如图:<img alt="" src="authImg.action" id="authImg">看不清楚?<a href="#" onclick="refersh()">单击此处刷新</a>





<script type="text/javascript">
  //刷新验证码
  function refersh(){
     alert("av");
     document.getElementById("authImg").src='authImg.action?now=' +(new Date()).getTime();
  }
</script>



以上就是实现一个验证码的主要过程
分享到:
评论

相关推荐

    struts中实现验证码

    在Struts2框架中,实现验证码功能主要是为了增强网站的安全性,防止自动化脚本或恶意用户进行批量、无意义的注册或登录尝试。以下将详细解释如何在Struts2环境中设置验证码并展示其核心组件: 1. **HTML 页面**: ...

    struts2实现验证码

    Struts2是一个强大的MVC(Model-...总结起来,Struts2实现验证码功能涉及到Java类的编写、session管理、Struts2配置、JSP页面设计以及用户交互逻辑的处理。掌握这些步骤,可以帮助开发者构建安全且用户友好的Web应用。

    使用struts2.0实现的验证码功能

    - "jsp,struts使用struts2.0实现的验证码功能"标签可能指代在JSP页面中使用Struts2的标签库,例如`&lt;s:form&gt;`,`&lt;s:textfield&gt;`,`&lt;s:submit&gt;`等,这些标签简化了表单和Action之间的数据绑定。 6. **struts-...

    struts2生成中文验证码的Action

    要实现Struts2中的中文验证码Action,我们需要以下步骤: 1. **配置Struts2**: 首先,确保你的项目已经集成了Struts2框架,并且在`struts.xml`配置文件中添加了Action的配置。Action的配置应包含一个对应的Action类...

    Struts2的验证码生成

    通过以上步骤,我们就能在Struts2应用中实现一个完整的验证码功能。这不仅提高了网站的安全性,也为用户提供了更好的交互体验。在实际开发中,还需要根据项目需求进行相应的定制和优化,确保验证码系统既有效又易于...

    struts2 生成验证码

    Struts2作为一款流行的Java Web应用框架,支持多种方式来实现验证码功能。本文将详细介绍如何在Struts2项目中生成并显示验证码。 #### 二、核心概念 1. **验证码**:一种用于区分用户是人还是计算机程序的技术手段...

    Struts2验证码用户登录

    在本文中,我们将深入探讨如何在Struts2框架中实现验证码功能,并结合JavaScript和session技术来增强用户体验。 首先,验证码的核心是生成一个随机的、难以自动识别的图像。这通常涉及到以下几个步骤: 1. **生成...

    Struts2验证码

    在Struts2框架下实现验证码功能,可以帮助提升用户体验和系统安全性。以下将详细讲解如何在Struts2中创建前端注册验证码。 首先,验证码的实现通常包括两个主要部分:后端生成验证码和前端展示及验证。 1. **后端...

    struts2下实现了图片验证码

    ### Struts2 下实现图片验证码的关键技术点 #### 一、引言 在现代Web应用中,验证码(CAPTCHA)是一种常见的用户验证机制,用于区分真实用户与自动化软件(如爬虫)。Struts2框架因其丰富的插件支持及灵活性,在...

    struts2 图片 验证码

    总结来说,Struts2实现图片验证码主要涉及生成随机字符串、绘制图片、配置Action、定义结果类型以及处理用户验证。这个过程需要结合Java图形编程、HTTP响应处理和会话管理等多个方面的知识。通过实践,你可以更好地...

    struts2-生成图片验证码

    "struts2-生成图片验证码"的主题表明我们将探讨如何在Struts2框架中实现图片验证码的功能。 验证码通常由随机生成的一串字符组成,这些字符以图像形式显示,用户需要输入他们看到的字符以完成验证。在Struts2中实现...

    登陆验证码(struts2实现)

    **标题:“登陆验证码(struts2实现)”,描述中提到的博文链接:https://ewf-momo.iteye.com/blog/1678220** 验证码(CAPTCHA)是一种用于防止自动化程序(如机器人)滥用服务的技术。在登录过程中,验证码能够确保...

    基于struts1.x的验证码实现

    1. **生成随机验证码**:首先,我们需要创建一个服务或者Action,生成一个随机字符串作为验证码。这个字符串可以包含字母、数字,甚至符号,长度可以根据需求来设定。生成的验证码通常要存储在一个会话(session)...

    struts2做的验证码(区分数字和字母)

    在Struts2中实现验证码功能,通常涉及到生成随机字符串、显示图像以及验证用户输入是否与生成的验证码匹配。 本压缩包"struts2做的验证码(区分数字和字母).rar"可能包含了一个实现了数字和字母混合的验证码生成器...

    Struts2实现的6位数字的验证码程序

    接着,表单中有一个`s:text`标签,用于显示生成的随机验证码,以及一个`s:textfield`让用户输入验证码。验证码图像通过`&lt;img&gt;`标签加载,其`src`属性指向`rand.action`,这是Struts2的Action配置,负责处理验证码的...

    struts2+spring3验证码登录实例

    在这个"struts2+spring3验证码登录实例"中,验证码功能是一个重要的安全措施,它可以防止恶意的自动登录尝试或机器人攻击。验证码通常由一串随机生成的字符或数字组成,用户需要在输入框中正确输入才能完成登录。...

    struts2图片验证码--struts2图片验证码-(通用版)

    ### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...

    struts2验证码

    在Struts2中,验证码的实现通常涉及到以下几个关键知识点: 1. **Action类**:在Struts2中,Action类是处理用户请求的核心组件。你需要创建一个专门的Action类来处理验证码的生成和验证。这个类通常会包含两个方法...

    Struts2 图片验证码

    总的来说,Struts2图片验证码的实现涉及了Action的逻辑处理、图像生成、session管理、表单验证等多个方面,体现了Struts2框架在构建复杂业务逻辑时的强大能力。通过熟练掌握这一技术,开发者可以为Web应用提供更为...

    基于struts2的验证码生成

    7. **安全注意事项**:在实现过程中,要考虑到安全性问题,比如防止CSRF攻击,确保只有合法的请求能触发验证码的验证。 8. **性能优化**:为提高用户体验,验证码应有合理的过期时间,避免用户长时间未操作后仍需...

Global site tag (gtag.js) - Google Analytics