在servlet中查询oracle验证用户

本文详细介绍了如何连接数据库并实现登录验证,包括加载驱动、创建连接、执行SQL语句等关键步骤,同时防范SQL注入漏洞,确保安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要注意的几点:

1. 连接数据库的步骤

    Class.forName("oracle.jdbc.driver.OracleDriver");  //加载驱动
   ct=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","qj555","qj555"); //创建连接
   sm=ct.createStatement();
   rs=sm.executeQuery("select usertel from usertest where username='"+uname+"'");

2. 在oracle\product\10.2.0\db_1\jdbc\lib目录下,找到oracle数据库的jar包,复制到tomcat的lib目录或项目的WEB-INF/lib目录

3. sql语句的漏洞,select * from tb where uname='' and upwd='' or 1='1',使用查询密码来验证的方式,防止sql注入漏洞,如select upwd from tb where uname=''。

4.使用完数据库相关对象后,注意关闭。

5.使用设置session的方式保存用户名和密码,使同一用户在不同页面能访问相同的信息。

7. 查询唯一记录时,最好使用select top 1 * from tb where ...,的方式,找到符合条件的记录,就马上返回,不会继续向后查询,但是oracle中不支持top语法,可以使用

    select rownum,t.* from usertest t where t.username='test3' and rownum<2来代替

6.连接sql server的步骤相同,但是驱动和url肯定是不同的,也需要jar包的支持,分别为msbase.jar,mssqlserver.jar,msutil.jar

   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
   String url="jdbc:microsoft:sqlserver://Localhost:1433;DatabaseName=student";
   String user="sa";
   String password="111";
   con=DriverManager.getConnection(“jdbc:microsoft:sqlserver://Localhost:1433;DatabaseName=usertest”,"sa","qj555");
   String sql="select * from SCORE";
   PreparedStatement ps=con.prepareStatement(sql);
   ResultSet rs=ps.executeQuery();  

代码如下

//验证登录
package com.gtest;

import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class LoginCl extends HttpServlet{
	
	//处理get请求
	//req 用于获得客户端的信息
	//res 用于向客户端(浏览器)返回信息
	public void doGet(HttpServletRequest req, HttpServletResponse res){
		
		this.doPost(req, res);
		
	}
	
	//处理get请求
	//req 用于获得客户端的信息
	//res 用于向客户端(浏览器)返回信息
	public void doPost(HttpServletRequest req, HttpServletResponse res){
		
		Connection ct=null;
		Statement sm=null;
		ResultSet rs=null;
		try {
			
			//接收用户名和密码
			String uname=req.getParameter("username");
			String upwd=req.getParameter("passwd");
			//使用数据库方式验证
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			ct=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","qj555","qj555");
			sm=ct.createStatement();
			rs=sm.executeQuery("select usertel from usertest where username='"+uname+"'");
			
			//PrintWriter pw=res.getWriter();
			
			if (rs.next())
			{
				String spwd=rs.getString(1).trim();
				
				if (spwd.equals(upwd)){
					
					//验证通过
					HttpSession  hs = req.getSession(true);
					//修改session的存在时间,单位为秒
					hs.setMaxInactiveInterval(30);
					hs.setAttribute("pass", "ok");
					//保存用户名和密码
					hs.setAttribute("uname",uname);
					hs.setAttribute("upwd",upwd);
					
					res.sendRedirect("welcom?uname="+uname+"&upwd="+upwd);//写你要跳转的servlet的url
				}
				else{
					res.sendRedirect("login");
					//pw.println(spwd);
				}
			}
			else{
				res.sendRedirect("login");
			}
			
	    }
	    catch (Exception ex) {
	    	
	    	ex.printStackTrace();
	    }
	    finally{
	    	
	    	try {
	    		
	    		if(rs!=null){
	    			rs.close();
	    		}
	    		if(sm!=null){
	    			sm.close();
	    		}
		    	if(ct!=null){
		    		ct.close();
		    	}
		    }
		    catch (Exception ex) {
		    	ex.printStackTrace();
		    }
	    }
	    
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值