session绑定的验证码返回的是null
else if(action.equals("/login")){
//number1:用户提交的验证码
String number1=request.getParameter("number");
//number2:session对象上绑定的验证码
HttpSession session=request.getSession();
String number2=(String)session.getAttribute("number");
if(!number1.equalsIgnoreCase(number2)){
request.setAttribute("number_error", "验证码错误");
request.getRequestDispatcher("login.jsp")
.forward(request,response);
return;
}
//只有在验证码正确的情况下,才会比较用户名和密码是否正确
String username =
request.getParameter("username");
String pwd =
request.getParameter("pwd");
UserDAO dao = new UserDAO();
try {
User user = dao.findByUserName(username);
// System.out.println(user.getPwd()+",");
try {
if(user != null && user.getPwd().equals(MD5Util.encrypt(pwd.toUpperCase()))){
//绑订数据到session对象上,用于验证
session.setAttribute("user", user);
//登录成功,跳转到主功能页面
response.sendRedirect("list.do");
}else{
//登录失败,提示用户
request.setAttribute("login_error",
"用户名或密码错误");
request.getRequestDispatcher("login.jsp")
.forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
//将系统异常扔给容器来处理
throw new ServletException(e);
}
}
package web;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
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 CheckcodeServlet extends HttpServlet {
private int WIDTH= 80;
private int HEIGHT= 30;
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//一、绘图
//step1,创建一个内存映像对象(画布)
BufferedImage image =
new BufferedImage(WIDTH,HEIGHT,
BufferedImage.TYPE_INT_RGB);
//step2,获得画笔
Graphics g = image.getGraphics();
//step3,
Random r = new Random();
//step3,给画笔上一个随机的颜色
g.setColor(new Color(r.nextInt(255),
r.nextInt(255),r.nextInt(255)));
//step4,填充画布
g.fillRect(0, 0, WIDTH, HEIGHT);
//step5,在画布上绘图
// String number = r.nextInt(99999) + "";
String number ="";
// g.setColor(new Color(0,0,0));
for (int i = 0; i < 4; i++) {
g.setColor(new Color(r.nextInt(255),
r.nextInt(255),r.nextInt(255)));
int h=(int)(HEIGHT*0.3+(HEIGHT*0.7)*r.nextDouble());
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,h));
String str=getNumber(1);
number+=str;
g.drawString(str, i*WIDTH/5, h);
}
//将number 绑定到session上
HttpSession session =request.getSession();
session.setAttribute("number", number);
//step6,设置字体的大小、风格
// g.setFont(new Font(null,
// Font.ITALIC|Font.BOLD,20));
// g.drawString(number, 5, 22);
//加干扰线
for (int i = 0; i < 3; i++) {
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.drawLine(r.nextInt(WIDTH), r.nextInt(HEIGHT),r.nextInt(WIDTH), r.nextInt(HEIGHT));
}
//二、压缩图片,输出
response.setContentType("image/jpeg");
OutputStream ops =
response.getOutputStream();
//write方法:将原始图片(image)使用
//指定的压缩算法(jpeg)进行压缩,然后
//使用指定的输出流(ops)输出。
ImageIO.write(image, "jpeg", ops);
ops.close();
}/*返回一个指定长度的字符串
要求从A~Z,0~9中随机选取字符
*/
private String getNumber(int size) {
Random r=new Random();
String strs="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+"0123456789";
String number="";
for (int i = 0; i < size; i++) {
number+=strs.charAt(r.nextInt(strs.length()));
}
return number;
}
}
...全文
相关推荐
易语言源码易语言对象POST登录易语言论坛源码
易语言源码易语言对象POST登录易语言论坛源码
Asp.NET程序中常用的三十三种代码.
Asp.NET程序中常用的三十三种代码.
springboot集成redis缓存之手机验证码.docx
手机号获取验证码的三种存储方式: 1、采用session方式将验证码放入seeeion中并设置过期时间,用户注册登录发送验证码,然后合适对比; 2、采用数据库存储方式,每次将验证码和用户手机号绑定,然后直接查询数据库比对验证码; 3、采用redis方式将手机号码和获取的验证码放入redis缓存中,然后比对用户名和验证码;
jsp session
jsp session对详细的介绍,session 的方法,参数,对session 有详细代码分析
JQuery和SSH验证码
JQuery结合SSH操作验证码过程和关于ajax的URL在不同浏览器之间缓存问题


Web 开发
