生成验证码步骤:

验证码步骤:

一:web.xml文件里加

<servlet>
<servlet-name>validImg</servlet-name>
<servlet-class>
test.validImg
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>validImg</servlet-name>
<url-pattern>/validImg</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>

注释test.validImg 是一个类路径


二:
package test;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
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;
import javax.servlet.http.HttpSession;


public class validImg extends HttpServlet {
private Font mFont = new Font("Arial Black", Font.PLAIN, 20);
public void init() throws ServletException
{
super.init();
}
Color getRandColor(int fc,int bc)
{
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");

int width=75, height=16;
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<55;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
}
for (int i = 0;i < 7;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
}

String sRand="";
for (int i=0;i<4;i++)
{
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*i+10,15);
}
HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
private String getRandomChar()
{
int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = '\u0000';
switch (rand)
{
case 0:
itmp = Math.round(Math.random() * 25 + 97);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
case 1:
itmp = Math.round(Math.random() * 25 + 65);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
case 2:
itmp = Math.round(Math.random() * 25 + 97);
if(itmp == 111 || itmp ==19 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
default :
itmp = Math.round(Math.random() * 9);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
return String.valueOf(itmp);
}
}
}


三: jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery-1.3.2.js"></script>
<SCRIPT type="text/javascript">
function refresh1(){
$("#validImg").attr("src", "${pageContext.request.contextPath}/validImg?now="+new Date());
}
</SCRIPT>
</head>

<body>
<img src="${pageContext.request.contextPath}/validImg" id="validImg" width="60" height="20" οnclick="refresh1()"/>
</body>
</html>


四 action 中
String rand = (String) getSession().get("rand");
varcode是页面输入的文本框
if(vercode == null|| ("").equals(vercode)){
message="验证码不能为空";
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
return Action.ERROR;
}
if(rand==null)
{
message="验证码输入超时,请重新输入";
return Action.ERROR;
}
if(!this.vercode.toLowerCase().equals(rand.toLowerCase())){
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message="验证码输入错误";
return Action.ERROR;
}

password = PwdMD5.MD5(password);
if (ServiceManager.agent.getAdminUserService()
.findUserByNameAndPass(username, password)) {
/**
* 用户验证成功后,把数据放入session
*/
adminUserDto=ServiceManager.agent.getAdminUserService().findUserByEmail(username);
Date now=new Date();
adminUserDto.setLoginTime(now);
boolean flag=false;
flag=ServiceManager.agent.getAdminUserService().update(adminUserDto);
if(flag==true){
this.getSession().put("adminUser", adminUserDto);
// 用户名保存到cookie,暂略...
Cookie cookieAccount = new Cookie("adminUserAccount",
adminUserDto.getEmail());
// 保留一天
cookieAccount.setMaxAge(3600 * 24);
this.getResponse().addCookie(cookieAccount);
this.getRequest().setAttribute("today", new Date());
return Action.SUCCESS;
}
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message="登陆不成功";
return Action.ERROR;
} else {
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message = "密码不正确";
return Action.ERROR;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值