- image.jsp用于生成数字图片
- <%@pagecontentType="image/jpeg;charset=gb2312"import="java.awt.*,
- java.awt.image.*,java.util.*,javax.imageio.*"%>
- <%!
- ColorgetRandColor(intfc,intbc){//给定范围获得随机颜色
- Randomrandom=newRandom();
- if(fc>255)fc=255;
- if(bc>255)bc=255;
- intr=fc+random.nextInt(bc-fc);
- intg=fc+random.nextInt(bc-fc);
- intb=fc+random.nextInt(bc-fc);
- returnnewColor(r,g,b);
- }
- %>
- <%
- //设置页面不缓存
- response.setHeader("Pragma","No-cache");
- response.setHeader("Cache-Control","no-cache");
- response.setDateHeader("Expires",0);
- //在内存中创建图象
- intwidth=60,height=20;
- BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
- //获取图形上下文
- Graphicsg=image.getGraphics();
- //生成随机类
- Randomrandom=newRandom();
- //设定背景色
- g.setColor(getRandColor(200,250));
- g.fillRect(0,0,width,height);
- //设定字体
- g.setFont(newFont("TimesNewRoman",Font.PLAIN,18));
- //画边框
- //g.setColor(newColor());
- //g.drawRect(0,0,width-1,height-1);
- //随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
- g.setColor(getRandColor(160,200));
- for(inti=0;i<155;i++)
- {
- intx=random.nextInt(width);
- inty=random.nextInt(height);
- intxl=random.nextInt(12);
- intyl=random.nextInt(12);
- g.drawLine(x,y,x+xl,y+yl);
- }
- //取随机产生的认证码(4位数字)
- StringsRand="";
- Stringrand="";
- for(inti=0;i<4;i++){
- rand=String.valueOf(random.nextInt(10));
- sRand+=rand;
- //将认证码显示到图象中
- g.setColor(newColor(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用于进入登陆界面:
- <%@pagecontentType="text/html;charset=gb2312"language="java"errorPage=""%>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
- <%
- StringUsername=request.getParameter("Username");
- StringPassword=request.getParameter("Password");
- Stringinput=request.getParameter("rand");
- if(Username!=null&&Password!=null)
- {
- //把用户名和密码保存在session中
- session.setAttribute("user_name",Username);
- session.setAttribute("pass_word",Password);
- session.setAttribute("input",input);
- //验证用户输入的验证码是否正确
- if(input.equals(session.getAttribute("random")))
- {
- //如果正确就跳转到check.jsp验证用户名密码
- response.sendRedirect("check.jsp");
- }
- else
- {
- //验证码不正确
- out.print("错误");
- //JOptionPane.showMessageDialog(null,"请选择文件!","提示",JOptionPane.ERROR_MESSAGE);
- }
- }
- %>
- <scripttype="text/javascript">
- functioncheck()
- {
- if(form.Username.value=="")
- {
- alert("请输入用户名!!!");
- form.Username.focus();
- returnfalse;
- }
- if(form.Password.value=="")
- {
- alert("请输入密码!!!");
- form.Username.focus();
- returnfalse;
- }
- }
- </SCRIPT>
- <html>
- <HEAD>
- <title>用户登陆</title>
- </HEAD>
- <BODY>
- <formname="form"onsubmit="returncheck()"action="login.jsp"method="post">
- <TABLEwidth=265align=centerborder=0>
- <TBODY>
- <TRalign=centervalign="middle">
- <TDcolspan="2">
- <STRONG>登录</STRONG>
- </TD>
- </TR>
- <tr>
- <tdheight="54"align="center">用户名:</td>
- <tdwidth="181"height=54>
- <inputid=Usernamename=Username>
- </TD>
- </TR>
- <tr>
- <tdheight="54"align="center">密码:</td>
- <tdwidth="181"height=54>
- <inputid=Passwordtype=Passwordname=Password>
- </TD>
- </TR>
- <tr>
- <tdheight="54"align="center">认证码:</td>
- <tdwidth="181"height=54>
- <inputtype=textname=randmaxlength=4value=""size=6>
-
- <imgborder=1src="image.jsp">
- </td>
- </tr>
- <TR>
- <TDcolspan="2"align=center>
- <INPUTtype=submitvalue=登陆>
- <INPUTtype=resetvalue=重置>
- </TD>
- </TR>
- </TBODY>
- </TABLE>
- </FORM>
- </BODY>
- </HTML>
- check.jsp用于测试是否成功:
- <%@pagecontentType="text/html;charset=gb2312"language="java"errorPage=""%>
- <%@pageimport="java.sql.*"%>
- <jsp:useBeanid="sqltest"class="database.sqlbean"scope="page">
- </jsp:useBean>
- <html>
- <head>
- <title>认证码验证页面</title>
- <metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
- <METAHTTP-EQUIV="Pragma"CONTENT="no-cache">
- <METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">
- <METAHTTP-EQUIV="Expires"CONTENT="0">
- </head>
- <body>
- <%
- Stringrand=(String)session.getAttribute("random");
- Stringinput=(String)session.getAttribute("input");
- Stringuser_name=(String)session.getAttribute("user_name");
- Stringpass_word=(String)session.getAttribute("pass_word");
- %>
- 系统产生的认证码为:
- <%=rand%><br>
- 您输入的认证码为:
- <%=input%><br>
- <fontcolor=green>验证码输入相同,认证成功!</font><br>
- <br>
- 您输入的用户名为:
- <%=session.getAttribute("user_name")%><br>
- 密码为:
- <%=session.getAttribute("pass_word")%><br>
- <%
- Stringpermit;
- ResultSetrs=null;
- StringSqlString="select*fromUserInfowhereusername='"+user_name+"'andpassword='"+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(SQLExceptione1)
- {
- out.print("SQL异常!");
- }
- %>
- </body>
- </html>
- 连接数据库的Javabean:sqlbean.java
- packagedatabase;
- importjava.sql.*;
- publicclasssqlbean{
- publicStringquery_statement;
- publicResultSetresult=null;
- publicConnectionconn;
- publicvoidsetQuerystatement(Stringquery_statement)
- {
- this.query_statement=query_statement;
- }
- publicvoidsetConnection(StringdriverName,StringjdbcURL,
- Stringusername,Stringpasswd)throwsException
- {
- Connectionconn1;
- Class.forName(driverName);
- conn1=DriverManager.getConnection(jdbcURL,username,passwd);
- conn1.setAutoCommit(false);
- this.conn=conn1;
- }
- publicResultSetgetResult()
- {
- try
- {
- PreparedStatementselect_stm=conn.prepareStatement(query_statement,
- java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
- result=select_stm.executeQuery();
- }
- catch(Exceptione)
- {
- System.out.println(e);
- }
- returnresult;
- }
- }
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702554