jsp登录验证代码
image.jsp用于生成数字图片
<%@ page contentType="image/jpeg;charset=gb2312" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
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);
}
%>
<%
//设置页面不缓存
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,18));
//画边框
//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="";
String rand="";
for (int i=0;i<4;i++){
rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 图象生效
g.dispose();
// 将认证码存入SESSION
session.setAttribute("random",sRand);
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
login.jsp用于进入登陆界面:
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
用户登陆
check.jsp用于测试是否成功:
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage=""%>
<%@ page import="java.sql.*" %>
认证码验证页面
<%
String rand =(String)session.getAttribute("random");
String input =(String)session.getAttribute("input");
String user_name= (String)session.getAttribute("user_name");
String pass_word= (String)session.getAttribute("pass_word");
%>
系统产生的认证码为:
<%= rand %>
您输入的认证码为:
<%= input %>
验证码输入相同,认证成功~
您输入的用户名为:
<%= session.getAttribute("user_name") %>
密码为:
<%= session.getAttribute("pass_word") %>
<%
String permit;
ResultSet rs=null;
String SqlString="select * from UserInfo where username='"+user_name+"'and
password='"+pass_word+"'";
try
{
//设置连接
sqltest.setConnection("com.microsoft.jdbc.sqlserver.SQLServerDriver",
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=university",
"admin","123456");
//设置SQL语句
sqltest.setQuerystatement(SqlString);
//得到查询结果
rs=sqltest.getResult();
if (rs.next())
{
out.print("登陆成功");
//获得用户的权限
permit=rs.getString("permit");
if (permit.equals("1"))
{
out.println(":你的权限是管理员组");
}
else
{
out.println(":你的权限是用户组");
}
}
else
{
out.print("登陆失败,用户名或密码错");
}
}
catch(SQLException e1)
{
out.print("SQL异常~");
}
%>
连接数据库的Javabean: sqlbean.java
package database;
import java.sql.*;
public class sqlbean {
public String query_statement;
public ResultSet result=null;
public Connection conn;
public void setQuerystatement(String query_statement)
{
this.query_statement=query_statement;
}
public void setConnection(String driverName ,String jdbcURL,
String username,String passwd) throws Exception
{
Connection conn1;
Class.forName(driverName);
conn1=DriverManager.getConnection(jdbcURL, username, passwd);
conn1.setAutoCommit(false);
this.conn = conn1;
}
public ResultSet getResult()
{
try
{
PreparedStatement select_stm=conn.prepareStatement(query_statement,
java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY)
;
result=select_stm.executeQuery();
}
catch(Exception e)
{
System.out.println(e);
}
return result;
}
}