Struts2实现生成动态验证码并验证实例代码

 一、基本流程:

产生一个验证码页面(很小)→嵌入到表单中→点击可以刷新页面→表单提交时验证。

二、方法:

1、定义TestAction,实现画图方法

package com.zhuguang.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class TestAction extends ActionSupport implements SessionAware,ServletResponseAware
{
private Map<String, Object> session;
private HttpServletResponse response;
private static final long serialVersionUID = 1L;
private String chknumber;
@Override
public String execute() throws Exception
{
response.setHeader("Cache-Control", "no-cache");
int width=50; //图片宽度
int height=20; //图片高度
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics graphics=image.createGraphics();
graphics.setColor(this.getColor()); //背景颜色
graphics.fillRect(0, 0, width, height);
graphics.setFont(new Font("Arial",Font.BOLD,18));
graphics.setColor(this.getColor()); //字的颜色
String number=String.valueOf(System.currentTimeMillis()%9000+1000); //生成四位随机数
session.put("randomCode", number); //写入session中
graphics.drawString(number, (int)(width*0.1), (int)(height*0.8));
graphics.dispose();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(response.getOutputStream());
encoder.encode(image);
response.getOutputStream().flush(); //刷新到页面生成图片
response.getOutputStream().close(); //关闭writer
return null;
}
private Color getColor(){
int red=(int)(Math.random()*1000%256);
int green=(int)(Math.random()*1000%256);
int blue=(int)(Math.random()*1000%256);
return new Color(red,green,blue);
}
public String getChknumber()
{
return chknumber;
}
public void setChknumber(String chknumber)
{
this.chknumber = chknumber;
}
@Override
public void setSession(Map<String, Object> session)
{
// TODO Auto-generated method stub
this.session = session;
}
@Override
public void setServletResponse(HttpServletResponse response)
{
// TODO Auto-generated method stub
this.response = response;
}
} 

注意用到session和response

2、在struts.xml文件中注册:

<action name="randomCode" class="com.zhuguang.action.TestAction">
</action> 

其中不返回任何信息,这样就不会跳转页面

3、jsp页面编写

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
<!--
function reloadcode(obj,base){
var rand=new Date().getTime(); //这里用当前时间作为参数加到url中,是为了使URL发生变化,这样验证码才会动态加载,
//只是一个干扰作用,无确实意义,但却又非常巧妙,呵呵
obj.src=base+"randomCode.action?abc="+rand; //其实服务器端是没有abc的字段的。
}
//-->
</script>
<title>测试页面</title>
</head>
<body>
<form action="testLogin" method="post">
Username<input type="text" name="name"><br>
Password<input type="text" name="password"><br>
验证码:<input type="text" name="chknumber" id="chknumber" maxlength="4" class="chknumber_input">
<img title="看不清楚请点击这里" width="50" height="20" src="<%=basePath%>randomCode.action" id="safecode" onclick="reloadcode(this,'<%=basePath%>')" /><br>
<input type="submit" value="Loginin">
</form>
</body>
</html> 

4、验证

(1)在Action中添加一个验证方法

public String testLogin()
{
if(session.get("randomCode").equals(chknumber))
{
return SUCCESS;
}
else
{
return ERROR;
}
} 

(2)在struts.xml中进行注册

<action name="testLogin" class="com.zhuguang.action.TestAction" method="testLogin">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>

以上所述是小编给大家介绍的Struts2实现生成动态验证码并验证实例代码,希望对大家有所帮助!

(0)

相关推荐

  • Struts2学习笔记(3)-DMI动态调用方式

    什么是DMI?DMI即所谓的动态方法调用. Action在执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI). 第一种方式,在struts.xml中对Action添加method: 复制代码 代码如下: <struts>     <constant name="struts.devMode" value="true" />  

  • 详解Struts2动态方法调用

    动态方法就是一个Action对应多个请求,减少Action的数量 1.指定method属性 <action name="addAction" method="add" class="com.venn.action.HelloWorldAction"> <result>/jsp/add.jsp</result> </action> 2.感叹号(!)方式(不推荐使用) <action name=&

  • Struts2动态结果集代码示例

    动态结果集可以在action中指定要跳转的页面(${}是OJNL表达式,不是EL表达式) struts.xml: <package name="resultTypes" namespace="/r" extends="struts-default"> <action name="result_mul" class="cn.edu.hpu.action.ResultAction"> &

  • AjaxFileUpload结合Struts2实现多文件上传(动态添加文件上传框)

    上篇文章http://www.jb51.net/article/124489.htm介绍了ajaxfileupload实现多文件上传, 但只是固定的文件个数,如果需求不确定是多少文件 则我们就需要动态的添加文件上传框,以实现灵活性. 基于上篇基本框架是不变的,主要修改以下几个方面 1.jQuery实现动态添加删除文件上传框 2.获取文件上传框的ID 3.ajaxfileupload.js里将ID数组转换为需要的Object数组 依次解决上面问题 一.实现动态添加删除文件上传框 <body> &

  • Struts2实现生成动态验证码并验证实例代码

     一.基本流程: 产生一个验证码页面(很小)→嵌入到表单中→点击可以刷新页面→表单提交时验证. 二.方法: 1.定义TestAction,实现画图方法 package com.zhuguang.action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Map; import javax.se

  • PHP生成制作验证码的简单实例

    看完就会,不会你打我,话不多说.开搞(人狠话不多) 1.0 首先先看代码 <?php header("Content-Type:text/html;Charset=UTF-8");// 设置页面的编码风格 header("Content-Type:image/jpeg");// 通知浏览器输出的是jpeg格式的图像 $img = imagecreatetruecolor(150,50);//创建画布并设置大小 x轴150 y轴50 $bgcolor = ima

  • 使用Vue动态生成form表单的实例代码

    具有数据收集.校验和提交功能的表单生成器,包含复选框.单选框.输入框.下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传功能,支持事件扩展. 欢迎大家star学习交流:github地址 示例 https://raw.githubusercontent.com/xaboy/form-create/dev/images/sample110.jpg 安装 npm install form-create OR git clone https://github.com/xa

  • php生成动态验证码gif图片

    这是一个通过php生成的动态验证码图片的示例,重点是可以运行哦!下面先发下效果图: 下面是php生成动态验证码需要用到的相关类和函数. <?php /** *ImageCode 生成包含验证码的GIF图片的函数 *@param $string 字符串 *@param $width 宽度 *@param $height 高度 **/ function ImageCode($string='',$width=75,$height=25){ $authstr=$string?$string:((tim

  • Spring Security 图片验证码功能的实例代码

    验证码逻辑 以前在项目中也做过验证码,生成验证码的代码网上有很多,也有一些第三方的jar包也可以生成漂亮的验证码.验证码逻辑很简单,就是在登录页放一个image标签,src指向一个controller,这个Controller返回把生成的图片以输出流返回给页面,生成图片的同时把图片上的文本放在session,登录的时候带过来输入的验证码,从session中取出,两者对比.这位老师讲的用Spring Security集成验证码,大体思路和我说的一样,但更加规范和通用些. spring securi

  • Android开发中通过手机号+短信验证码登录的实例代码

    首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码. 其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了. activity_login.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

  • Struts2 控制文件上传下载功能实例代码

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Struts贯彻AOP 思想,在下载之前提供对用户权限控制的API. 下面我们将详细介绍上传和下载的相关内容. 一.Struts文件上传机制 想要实现文件上传功能,页面的表单的method属性必须被指定为post,还有enctype属性必须为multipart/form-data,该值表示上传的内容将会以二进

  • PyQt5主窗口动态加载Widget实例代码

    本文研究的主要是PyQt5主窗口动态加载Widget的代码示例,具体如下. 我们通过Qt Designer设计两个窗口,命名为主窗口(MainForm)和子窗口(ChildrenForm).我们在主窗口的空白中央添加一个栅格布局并命名为MaingridLayout,等会需要将ChildrenForm放进去. 编写代码 from PyQt5 import QtWidgets from MainForm import Ui_MainForm from Children import Ui_Form

  • vue实现随机验证码功能的实例代码

    1.html代码 <div class="form-group" style="display: flex;"> <div> <span>验证码:</span> <input type="text" id="code" v-model="code" class="code" placeholder="请输入您的验证码&quo

  • 使用 Node.js 实现图片的动态裁切及算法实例代码详解

    背景&概览 目前常见的图床服务都会有图片动态裁切的功能,主要的应用场景用以为各种终端和业务形态输出合适尺寸的图片. 一张动辄以 MB 为计量单位的原始大图,通常不会只设置一下显示尺寸就直接输出到终端中,因为体积太大加载体验会很差,除了影响加载速度还会增加终端设备的内存占用.所以要想在各种终端下都能保证图片质量的同时又确保输出合适的尺寸,那么此时就需要根据图片 URL 来对原始图片进行裁切,然后动态生成并输出一张新的图片. URL 的设计 图片 URL 需要包含图片 id.尺寸.质量等信息.有两种

随机推荐