gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Struts2实现生成动态验证码并验证实例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

 1、基本流程:

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

2、方法:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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文件中注册:

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

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

3、jsp页面编写 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<%@ 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 id="codetool">

4、验证 。

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

?
1
2
3
4
5
6
7
8
9
10
11
public String testLogin()
{
if (session.get( "randomCode" ).equals(chknumber))
{
return SUCCESS;
}
else
{
return ERROR;
}
}

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

?
1
2
3
4
<action name= "testLogin" class = "com.zhuguang.action.TestAction" method= "testLogin" >
<result name= "success" >success.jsp</result>
<result name= "error" >error.jsp</result>
</action>

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

  • Struts2
  • 验证码
  • 延伸 · 阅读

    • 2020-05-09Struts2实现文件下载功能代码分享(文件名中文转码
    • 2020-05-08一个简单的ASP.NET验证码
    • 2020-05-07Python3实现发送邮件和发送短信验证码功能
    • 2020-05-06SSH框架网上商城项目第7战之整合Struts2和Json
    • 2020-05-06SSH框架网上商城项目第1战之整合Struts2、Hibernat
    • 2020-05-05php 验证码(倾斜,正弦干扰线,黏贴,旋转)
    精彩推荐
    • JAVA教程Java编程实现遍历两个MAC地址之间所有MAC的方法

      Java编程实现遍历两个MAC地址之间所有MAC的方法

      这篇文章主要介绍了Java编程实现遍历两个MAC地址之间所有MAC的方法,涉及Java针对MAC的遍历获取与字符串转换相关技巧,具有一定参考借鉴价值,需要的朋友可... 。

      luoboo525 209 2020-01-21
    • JAVA教程小议Java的源文件的声明规则以及编程风格

      小议Java的源文件的声明规则以及编程风格

      这篇文章主要介绍了小议Java的源文件的声明规则以及编程风格,仅给Java初学者作一个简单的示范,需要的朋友可以参考下... 。

      goldensun 393 2020-01-06
    • JAVA教程Java调用WebService接口的方法

      Java调用WebService接口的方法

      这篇文章主要介绍了Java调用WebService接口的方法,实例分析了有参方法Add的使用技巧,需要的朋友可以参考下... 。

      静水流深 138 2019-12-09
    • JAVA教程jvm内存溢出解决方法(jvm内存溢出怎么解决)

      jvm内存溢出解决方法(jvm内存溢出怎么解决)

      jvm内存溢出解决方法,详细内容看下面解释... 。

      java教程网 487 2019-10-25
    • JAVA教程Java 并发编程学习笔记之Synchronized简介

      Java 并发编程学习笔记之Synchronized简介

      虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相... 。

      liuxiaopeng 393 2020-04-30
    • JAVA教程JavaWeb工程中集成YMP框架快速上手

      JavaWeb工程中集成YMP框架快速上手

      YMP是一个非常简单、易用的一套轻量级JAVA应用开发框架,设计原则主要侧重于简化工作任务、规范开发流程、提高开发效率。对YMP框架感兴趣的小伙伴们可... 。

      有理想的鱼 361 2020-04-02
    • JAVA教程java实现统计字符串中大写字母,小写字母及数字出现次数的方法示例

      java实现统计字符串中大写字母,小写字母及数字出现次数的方法

      这篇文章主要介绍了java实现统计字符串中大写字母,小写字母及数字出现次数的方法,涉及java针对字符串的遍历、判断、运算相关操作技巧,需要的朋友可以... 。

      longzhoufeng 285 2019-06-27
    • JAVA教程Java中使用synchronized关键字实现简单同步操作示例

      Java中使用synchronized关键字实现简单同步操作示例

      这篇文章主要介绍了Java中使用synchronized关键字实现简单同步操作示例,本文起讲解了synchronized修饰函数、synchronized修饰代码块、synchronized修饰静态方法等内... 。

      JUNJIE 486 2019-12-15

    最后此篇关于Struts2实现生成动态验证码并验证实例代码的文章就讲到这里了,如果你想了解更多关于Struts2实现生成动态验证码并验证实例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com