2017-08-08 192 views
0

我有一个项目进行登录,其中的密码是硬编码和用户名是从数据库。我有一个简单的index.jsp在哪里输入用户名和密码,info.jsp在哪里可以访问,如果凭证是正确的,error.jsp,当凭证是错误的,登录servlet。从数据库验证硬编码的密码和用户名

这是我登录的servlet:

package webAccess; 

import java.io.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import javax.servlet.*; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 



@WebServlet("/Login") 
public class Login extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String username = request.getParameter("username"); 
     String password = request.getParameter("password"); 

     try{ 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      Connection con = DriverManager.getConnection("","", ""); 
      Statement st = con.createStatement(); 
      ResultSet rs; 
      rs = st.executeQuery("select * from user where USERID=?"); 



      if(username.equals(rs.getString("USERID")) && password.equals("password")){ 


       response.sendRedirect("info.jsp"); 
      } 
      else { 
       response.sendRedirect("index.jsp"); 
      } 


     } 

     catch (ClassNotFoundException | SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

中的index.jsp,它只是加载一个空格我输入凭据后。

我改变我的代码如下:

package webAccess; 

import java.io.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import javax.servlet.*; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 



@WebServlet("/Login") 
public class Login extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String USERID = request.getParameter("username"); 
     String PWD = request.getParameter("password"); 

     try{ 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      Connection con = DriverManager.getConnection("","", ""); 
      PreparedStatement ps =con.prepareStatement 
        ("select USERID from user where USERID=?"); 

      ps.setString(1, USERID);    
      ResultSet rs=ps.executeQuery(); 
      rs.next(); 


       if(USERID.equals(rs.getString("USERID")) && PWD.equals("password")){ 

        response.sendRedirect("info.jsp"); 
      } 
      else { 
       response.sendRedirect("error.jsp"); 
      } 




    }catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

} 
} 

如果用户名和密码是正确的,将重定向到info.jsp,如果用户名是正确的,密码是不是会重定向到error.jsp文件。但是,如果用户名无效并且密码正确且不正确,则会加载空白区域。

+0

如果凭据错误,您将重定向到index.jsp而不是error.jsp。 –

+2

如果发生异常,页面会被重定向到哪里?另外,您不应该在密码中以明文形式存储密码 –

+3

硬编码密码?什么可能会出错? :-) – paxdiablo

回答

0

您的代码和查询应该修改如下:

从USERID =?的用户中选择密码。

while(rs.next()) { 
    if(password.equals(rs.getString("password"))){ 
     response.sendRedirect("info.jsp"); 
    } else { 
     response.sendRedirect("error.jsp"); 
    } 
}