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);        
        
    }    
    
    
}
原文地址:https://www.cnblogs.com/beautiful-code/p/5433429.html