zoukankan      html  css  js  c++  java
  • Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞

    Login.java

    //登录界面
    package com.tsinghua;
    
    import javax.servlet.http.*;
    import java.io.*;
    
    public class Login extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        {
        
                //业务逻辑
            try{
                //中文乱码
                //浏览器默认ISO-8859
                res.setContentType("text/html;charset=gbk");            
                
                PrintWriter pw = res.getWriter();
                
                //返回登录界面
                pw.println("<html>");
                pw.println("<body>");
                //得到error信息
                String info = req.getParameter("info");
                if(info != null)
                {
                    pw.println("<h1>你的用户名或是密码错误!</h1>");
                }
                pw.println("<h1>登录界面</h1>");
                pw.println("<form action='loginCl' method=post>");
                pw.println("用户名<input type='text' name='username'/><br/>");
                pw.println("密码<input type='password' name='userpwd'/><br/>");
                pw.println("<input type='submit' value='loing' /><br/>");
                pw.println("</form>");
                pw.println("</body>");
                pw.println("</html>");
                
                
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            
        }
        
         //处理get请求
         //req用于获得客户端(浏览器)的信息
         //res用于向 客户端(浏览器)返回信息
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        {
            
            this.doGet(req,res);        
            
        }    
        
        
    }

    LoginCl.java

    //登录界面
    package com.tsinghua;
    
    import javax.servlet.http.*;
    import java.io.*;
    import java.sql.*;
    
    public class LoginCl extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        {
            
                Connection ct = null;
                Statement sm = null;
                ResultSet rs = null;        
            
        
                //业务逻辑
            try{
                
                //接收用户名和密码
                String u  = req.getParameter("username");
                String p = req.getParameter("userpwd");
                
                //连接数据库,三部曲,加载驱动,建立连接
                //加载驱动包
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                //得到连接
                ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","123456");
                //创建一个Statement
                sm = ct.createStatement();
                //top 1 会提高查询的效率,否则数据库查询完所有再把结果告诉你
                
                rs = sm.executeQuery("select top 1 passwd from users where userName='"+u+"'");
                //executeQuery返回的是一个ResultSet执行查询select语句用Query
                //executeUpdate返回的是int,因此是执行增加删除和修改
                if(rs.next())
                {
                    
                    //这说明用户是存在的
                    String dbPasswd = rs.getString(1);
                    
                    if(dbPasswd.equals(p))
                    {
                    //真的合法
                    //合法    
                    //将验证成功的信息写入session
                    //得到session,得到session那张表
                    HttpSession hs = req.getSession(true);
                    //默认30分钟,为了展示效果下面修改销毁时间
                    //该方法是按照秒来算的
                    hs.setMaxInactiveInterval(30);
                    
                    //写入属性
                    hs.setAttribute("uname",u);
                                    
                    //跳转到welcome
                    res.sendRedirect("wel?uname="+u+"&upass="+p);                    
                        
                    }
                }else{
                    //说明用户名不存在
                    //不合法
                    //写你要到的Servlet的那个URL
                    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();
                    }
                
            }
            
        }
        
         //处理get请求
         //req用于获得客户端(浏览器)的信息
         //res用于向 客户端(浏览器)返回信息
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        {
            
            this.doGet(req,res);
            
        }    
        
        
    }

    Welcome.java

    //登录界面
    package com.tsinghua;
    
    import javax.servlet.http.*;
    import java.io.*;
    
    public class Welcome extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        {
            //得到session,得到session那张表
            HttpSession hs = req.getSession(true);
            //返回的是object类型,强转成String
            String myName = (String)hs.getAttribute("uname");
            //得到从logincl传递的用户名和密码
    
            
            //判断
            if(myName == null)
            {
                try
                {
                    //非法登录
                    res.sendRedirect("login?info=error1");
                    //立即直接返回
                    return;
                
                }catch(Exception ex)
                {
                    ex.printStackTrace();
                }
    
            }
            
            
    
        
                //业务逻辑
            try{
                
                PrintWriter pw = res.getWriter();
                
                //返回登录界面
                pw.println("Welcome,hello,"+myName);            
                
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            
        }
        
         //处理get请求
         //req用于获得客户端(浏览器)的信息
         //res用于向 客户端(浏览器)返回信息
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        {
            
            this.doGet(req,res);        
            
        }    
        
        
    }
  • 相关阅读:
    【luogu T34117 打油门】 题解
    【luogu P1774 最接近神的人_NOI导刊2010提高(02)】 题解
    【luogu P1462 通往奥格瑞玛的道路】 题解
    【luogu P3808 AC自动机(简单版)】 模板
    替罪羊树~讲解
    【luogu P3369 【模板】普通平衡树(Treap/SBT)】 模板 Scapegoat Tree
    【luogu P1801 黑匣子_NOI导刊2010提高(06)】 题解
    【luogu P2590 [ZJOI2008]树的统计】 题解
    【luogu P3398 仓鼠找sugar】 题解
    【luogu P3884 [JLOI2009]二叉树问题】 题解
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/5433429.html
Copyright © 2011-2022 走看看