login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'login.jsp' starting page
login_ok.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'login_ok.jsp' starting page
<%
String strLogin=(String)session.getAttribute("login");
String strUser=(String)session.getAttribute("me");
if (strLogin==null)
{
out.println("请先登录,谢谢!
");
out.println("5秒钟后,自动跳转到登录页面!
");
response.setHeader("Refresh","5;URL=login.jsp");
}
else
{
if (strLogin.equals("ok"))
{
out.println(strUser+"欢迎进入我们的网站!");
}
else
{
out.println("用户名或密码错误,请重新登录!
");
out.println("5秒钟后,自动跳转到登录页面!
");
response.setHeader("Refresh","5;URL=login.jsp");
}
}
%>
login_error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'login_error.jsp' starting page
密码或验证码输入错误,0分3秒后可跳转至login页
<%-- 密码或验证码输入错误,3秒钟后跳转至login.jsp
<%
out.println( "");
//out.println("");
%> --%>
verify.jsp
<%@ page language="java" import="java.util.*,com.JDBCUtil,java.sql.*" pageEncoding="utf-8"%>
My JSP 'verify.jsp' starting page
<%
String rand =(String)session.getAttribute("rand");
String input =request.getParameter("verify");
if(rand.equals(input))
{
String strUser=request.getParameter("user");
String strPass=request.getParameter("pass");
//打开连接
Connection conn = JDBCUtil.getConnection();
//设置sql语句和sql参数
String sql="select COUNT(*) from Admin where a_name= ? and a_pass= ?";
Object[] param =new Object[2];
param[0]=strUser;
param[1]=strPass;
//查询并返回结果集
ResultSet rs=JDBCUtil.doParamQuery(sql, param);
//将指针移动到第一行
rs.next();
//显示第一行第一列的值
System.out.println("数据库有"+rs.getInt(1)+"条记录与此相符合");
if(rs.getInt(1)==1){
System.out.println("登录成功");
//保存登录状态信息
session.setAttribute("login", "ok");
session.setAttribute("me", strUser);
response.sendRedirect("./login_ok.jsp");
}else{
System.out.println("登录失败");
response.sendRedirect("./login_error.jsp");
//直接在此页返回login.jsp,会使验证码不刷新,故使用跳转至错误处理页,再跳转至login.jsp
//out.println("");
//window.history.back(-1);验证码不刷新
//out.println("");
//out.println("");
}
}else{
out.println("");
response.sendRedirect("./login_error.jsp");
//直接在此页返回login.jsp,会使验证码不刷新,故使用跳转至错误处理页,再跳转至login.jsp
//out.println("");
//out.println("");
//out.println("");
}
/*if(strUser.equals("admin")&&strPass.equals("admin")&&rand.equals(input)){
out.println("登陆成功
");
}else{
out.println("登陆失败
");
}*/
/*if(strUser.equals("admin"))
{
if(strPass.equals("admin"))
{
if(rand.equals(input))
{
out.println("");
out.println("登录成功");
}
else{
out.println("");
out.println("");
}
}
else{
out.println("");
out.println("");
}
}
else
{
out.println("");
out.println("");
}
*/
%>
verifyCode.jsp
<%@ page contentType="image/jpeg" language="java" pageEncoding="utf-8"%>
<%@ page import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*"%>
<%!
Color getRandColor(int fc,int bc)
{
if(fc>255) fc=255;
if(bc>255) bc=255;
//随机生成rgb颜色
Random random = new Random();
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);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创建图象
int width=60, height=20;
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(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,22));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),40+random.nextInt(110),60+random.nextInt(110)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>