从数据库验证硬编码的密码和用户名
问题描述:
我有一个项目进行登录,其中的密码是硬编码和用户名是从数据库。我有一个简单的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文件。但是,如果用户名无效并且密码正确且不正确,则会加载空白区域。
答
您的代码和查询应该修改如下:
从USERID =?的用户中选择密码。
while(rs.next()) {
if(password.equals(rs.getString("password"))){
response.sendRedirect("info.jsp");
} else {
response.sendRedirect("error.jsp");
}
}
如果凭据错误,您将重定向到index.jsp而不是error.jsp。 –
如果发生异常,页面会被重定向到哪里?另外,您不应该在密码中以明文形式存储密码 –
硬编码密码?什么可能会出错? :-) – paxdiablo