servlet用户登录网站(数据库验证)sqlserver

2.Servlet中操作数据库
目的:增加到数据库验证用户的功能
特别注意:sql注入漏洞
select * from users where username='admin' and passwd=' admin' or 1='1 ';

解决方法:

不要同时查询用户名和密码,先查询用户名,如果存在,然后将其密码与数据库存储的密码

相比较,若相等,验证成功

 

注意:
需要将连接微软sqlserver数据库的3个jar包(msbase.jar

mssqlserver.jar msutil.jar),拷贝到tomcat服务器(我用mysql故只用一个jar包:

mysql-connector-java-5.1.6-bin.jar)
具体有两种方法:
(1)将.jar 包拷贝到%tocomcat%/commons/lib文件夹
(2)或者在你的webapps目录的WEB-INF文件夹下建立一个lib文

件夹,然后把3个jar包拷贝到lib文件夹下
区别:
第一种:所有的webapps都可以使用3个jar包(公用lib库)
第二种:只有放入jar包的那个webapps能使用jar(独用lib库)

代码示例:

先建立数据库:(testdata1.sql)

  1. create database spdb;  
  2. use spdb;  
  3.   
  4. create table users(  
  5. userId int auto_increment primary key not null,        
  6. username varchar(20),                               
  7. passwd varchar(30),                                   
  8. email varchar(30),                                      
  9. grade int                                                     
  10. );  
  11.   
  12. insert into users values(1,'admin','admin','admin@sohu.com',1);  
  13. insert into users values(2,'shunping','shunping','shunping@sohu.com',1);  
  14. insert into users values(3,'testuser1','testuser1','testuser1@sohu.com',5);  
  15. insert into users values(4,'testuser2','testuser2','testuser2@sohu.com',5);  
  16. insert into users values(5,'testuser3','testuser3','testuser3@sohu.com',5);  
  17. insert into users values(6,'testuser4','testuser4','testuser4@sohu.com',5);  
  18.   
  19. select * from users;  
  20.   
  21. --sql注入漏洞  
  22. select * from users where username='admin' and passwd=' admin' or 1='1 ';  

数据库连接servlet代码:(LoginCl.java)

  1. public void process(HttpServletRequest req, HttpServletResponse res)  
  2.         throws ServletException, IOException {  
  3.     res.setContentType("text/html;charset=UTF-8");// 处理中文乱码  
  4.     PrintWriter pw = res.getWriter();  
  5.   
  6.     Connection ct = null;  
  7.     Statement sm = null;  
  8.     ResultSet rs = null;  
  9.     try {  
  10.         // 接收用户名和密码  
  11.         String u = req.getParameter("username");  
  12.         String p = req.getParameter("passwd");  
  13.   
  14.         // 连接数据库  
  15.         Class.forName("com.mysql.jdbc.Driver");// 加载驱动  
  16.         // 得到连接  
  17.         ct = DriverManager.getConnection(  
  18.                 "jdbc:mysql://localhost:3306/spdb""root""root");  
  19.         // 创建Statement  
  20.         sm = ct.createStatement();  
  21.         // sql注入漏洞  
  22.         // rs=sm.executeQuery("select * from users where username='"+u  
  23.         // +"' and passwd='"+p+"'");  
  24.         rs = sm.executeQuery("select passwd from users where username='"  
  25.                 + u + "'");  
  26.   
  27.         if (rs.next()) {  
  28.             // 说明用户是存在的  
  29.             String dbPasswd = rs.getString(1);  
  30.             if (dbPasswd.equals(p)) {  
  31.                 // 真的合法  
  32.                 // 将用户信息存入session中  
  33.                 HttpSession hs = req.getSession(true);  
  34.                 hs.setMaxInactiveInterval(30);  
  35.                 hs.setAttribute("name", u);  
  36.                 res.sendRedirect("welcome");// 跳转  
  37.             } else {  
  38.                 res.sendRedirect("login");  
  39.             }  
  40.         } else {  
  41.             // 说明用户名不存在  
  42.             res.sendRedirect("login");  
  43.         }  
  44.     } catch (Exception ex) {  
  45.         ex.printStackTrace();  
  46.     } finally {// 按打开对象的逆序关闭对象  
  47.         try {  
  48.             if (rs != null) {  
  49.                 rs.close();  
  50.             }  
  51.             if (sm != null) {  
  52.                 sm.close();  
  53.             }  
  54.             if (ct != null) {  
  55.                 ct.close();  
  56.             }  
  57.         } catch (Exception ex) {  
  58.             ex.printStackTrace();  
  59.         }  
  60.     }  
  61. }  

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值