1、jsp中队校验码的引用代码片段如下:
<tr>
<td align="right" > </td>
<td align="right" height="30">
<label for="verifyCode" class="yonghuming_font">
验证码:
</label>
</td>
<td height="30">
<input type="text" id="verifyCode" name="verifyCode" size="6" />
<img alt="验证码" id="safecode" src="<%=context %>/servlet/ImageServlet">
看不清楚
</td>
</tr>
2、javascript中(写在js文件中也是一样的)刷新图片的方法代码片段如下:
function reloadVerifyCode(){
var timenow = new Date().getTime();
document.getElementById("safecode").src="<%=request.getContextPath()%>/servlet/ImageServlet?d="+timenow;
}
3、xml文件中对图片servlet的配置,代码片段如下:
<!-- 校验码servlet -->
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>ssh.init.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/servlet/ImageServlet</url-pattern>
</servlet-mapping>
4、图片servlet代码如下:
package ssh.init;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("***************** random picture created ****************");
this.doPost(request, response);
}
// 生成数字和字母的验证码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// System.out.println("request path="+request.getContextPath());
//创建一个位于缓冲区的图片,长为68,高为22
BufferedImage img = new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);
// 得到该图片的绘图对象
Graphics g = img.getGraphics();
Random r = new Random();
Color c = new Color(200, 150, 255);
g.setColor(c);
// 填充整个图片的颜色
g.fillRect(0, 0, 68, 22);
// 向图片中输出数字和字母
StringBuffer sb = new StringBuffer();
// char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
char[] ch = "abcdefghijklmnopqrstuvwxyz".toCharArray();
int index, len = ch.length;
for (int i = 0; i < 4; i++) {
index = r.nextInt(len);
g.setColor(new Color(r.nextInt(88), r.nextInt(188), r.nextInt(255)));
g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 18)); // 输出的字体和大小
g.drawString("" + ch[index], (i * 15) + 3, 18);
// 写什么数字,在图片的什么位置画
sb.append(ch[index]);
}
request.getSession(true).setAttribute("piccode", sb.toString());
ImageIO.write(img, "JPG", response.getOutputStream());
}
@SuppressWarnings("unused")
private void writeLog(String msg){
File f = new File("E:/Program Files/tomcat6.0.20/webapps/ROOT/temp.log");
if(!f.exists()){
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedWriter output = null;
try {
output = new BufferedWriter(new FileWriter(f));
} catch (IOException e) {
e.printStackTrace();
}
try {
output.write(msg);
} catch (IOException e) {
e.printStackTrace();
}
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5、接受登录请求的Action对校验码处理的代码片段如下:
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
/**
* 验证码校验
* */
String icp = (String) session.getAttribute("piccode");
if (icp==null && !Tools.isEmpty(verifyCode)){
icp = verifyCode;
}
if(Tools.isEmpty(verifyCode)|| !icp.equalsIgnoreCase(verifyCode)){
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
}
if (!Tools.isEmpty(icp) && !Tools.isEmpty(verifyCode)) {
if (!verifyCode.equalsIgnoreCase(icp)) {
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
}
}
6、工具类Tools的代码如下:
package ssh.comm.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class Tools
{
public Tools()
{
}
public static boolean isEmpty(String str)
{
return str == null || str.trim().length() == 0;
}
public static boolean isEmpty(Object obj_str)
{
return obj_str == null || isEmpty(obj_str.toString());
}
public static boolean isEmpty(Object objs[])
{
return objs == null || objs.length == 0;
}
public static boolean isEmpty(String strs[])
{
if(strs == null)
return true;
String as[] = strs;
int i = 0;
for(int j = as.length; i < j; i++)
{
String str = as[i];
if(str == null || str.trim().length() == 0)
return true;
}
return false;
}
@SuppressWarnings("unchecked")
public static boolean isEmpty(Map map)
{
return map == null || map.isEmpty();
}
@SuppressWarnings("unchecked")
public static boolean isEmpty(Collection c)
{
return c == null || c.isEmpty();
}
public static boolean equals(Object src, Object dest)
{
if(src != null)
return src.equals(dest);
return src == dest;
}
public static boolean notEquals(Object src, Object dest)
{
return !equals(src, dest);
}
public static long getTodayDate()
{
Date nowDate = new Date();
String nDate = (new SimpleDateFormat("yyyyMMddHHmmss")).format(nowDate);
long endDate = Long.parseLong(nDate);
return endDate;
}
public static String formatDateTime(String dateTime)
{
if(!isEmpty(dateTime))
return dateTime.replaceAll(":", "").replaceAll("-", "").replaceAll(" ", "");
else
return dateTime;
}
public static Date stringToDate(String dateTime)
throws ParseException
{
Date date = null;
if(!isEmpty(dateTime))
{
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
date = dateformat.parse(dateTime);
return date;
} else
{
return date;
}
}
public static String getStringDate()
throws ParseException
{
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
@SuppressWarnings("unchecked")
public static String[] quChu(String arr[])
{
List list = new ArrayList();
for(int i = 0; i < arr.length; i++)
if(!list.contains(arr[i]))
list.add(arr[i]);
return (String[])list.toArray(new String[list.size()]);
}
public static String validateToStr(Object obj)
{
return obj != null ? obj.toString().trim() : "";
}
}
分享到:
相关推荐
1.数字、字母、汉字结合的文字校验码 2.拖拉式图片校验码
校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。 公式如下: ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 ) (1) "*" 表示乘号 i--------表示身份证号码每一位的序号,从右...
提供网站登录时需要设置的校验码源码,程序员可依据此源码设计出4个字母或数字的校验码生成器!
在网上看到关于密码验证的资源,有一个40多分,简直坑爹,然后自己在网上找到了一个资源,修改了一下就可以用了,里面包含大小写、数字、特殊字符、四个都有,每一个有一个就可以了,然后去验证就行了,java,...
密码中要求有大写字母,小写字母,数字,长度大于8,特殊符号这几个要求,没有满足的话,出现红色提示 只有密码满足要求,下方的confirm password才可输入密码。 confirm password密码匹配成功,图标变为绿色,...
Android EditText 正则表达式 限制数字、字母、字符 输入 密码框
1:在输入过程中 如输入非法字符(例如标点或是字母)会弹出提示 2:输入的长度为13位,输入不够的话会弹出提示,超出13位则无法输入 3:输入完成后可直接按“回车”或是单击“校验”按钮进行校验 4:采用 条码...
密码框中必须包含大小写字母、数字 包含详细注释、代码清晰
Oracle身份证号码校验函数,可以将15位身份号码升为18位,检验出生年月等信息
密码复杂度验证,这里提供了禁止密码含有123、qwe、abc等含有连续字母、连续数字、键盘上连续字母的判断
5、密码中不能包含有连续四位及以上重复字符(含:大写字母、小写字母、数字、特殊符号),字母不区分大小写;(如:密码中不能包含8888、9999、aaaa 或AAAA或BbbB或 $$$$等四位及以上的重复字符)。 6、不区分大小写...
判断密码必须包括大小写字母,特殊字符,数字,长度8到16位
4位含字母和数字的随机验证码,保证下载后能直接运行
1:在输入过程中 如输入非法字符(例如标点或是字母)会弹出提示 2:输入的长度为13位,输入不够的话会弹出提示,超出13位则无法输入 3:输入完成后可直接按“回车”或是单击“校验”按钮进行校验 4:采用 条码...
用struts2做一个自定义密码检验器,密码既要包括数字又要包括字母。自定义校验器的使用方法和预定义校验器的使用方法相同
本文实例讲述了JS实现至少包含字母、大小写数字、字符的密码等级的两种方法。分享给大家供大家参考。具体如下: 前言 密码,如果设置的太简单,很容易就被攻破,所以很多网站将密码设置的要求设置的挺严格,一般是...
JSP验证码数字加字母经过本人亲自验证可用
javascript密码强度检测 javascript密码强度检测
现在很多论坛和博客都在用户注册时添加了验证密码强度的功能,在以前的文章中,我们曾经给出过一段检验密码强度的例子,今天再看一个与《js...=90) //大写字母 return 2; if (iN>=97 && iN <=122) //小写 return
说明文件在"说明.txt"或index.jsp内。