0

我试图创建一个带有登录页面的个人网站。首先,您必须创建一个帐户,该信息将以文本文件的形式存储在我的计算机中。一切顺利,直到我尝试登录。
为了登录,我写了一个代码来检查用户是否写了他们的帐户信息是对还是错。但每次它总是说User or password is not correct即使有正确的帐户。到目前为止,这是我的代码

PrintWriter out = response.getWriter();
String user = request.getParameter("u1");
String pass = request.getParameter("u2");
HttpSession session = request.getSession();


try {
     FileReader inputFile = new FileReader("D:/data.txt");
     BufferedReader bufferReader = new BufferedReader(inputFile);
     String a;
     String b;

    while ((a = bufferReader.readLine()) != null) {
        if (a.equals(user)) {
            b = bufferReader.readLine();
            if (b.equals(pass)) {
                session.setAttribute("login", user);
                response.sendRedirect("index.jsp");

            } else {
                session.setAttribute("login failed", "Your username or password is incorrect");
                response.sendRedirect("signinfailed.jsp");
                break;
            }
        }  else {
            session.setAttribute("login failed", "Your username or password is incorrect");
            response.sendRedirect("signinfailed.jsp");
            break;
        }
    }
    bufferReader.close();
}catch(Exception e){
    System.out.println("Exception");
}
finally {
        out.close();
    }
}
4

2 回答 2

1

它没有捕获任何异常吗?你检查过你的日志吗?

我看到了蝙蝠的一个问题:

FileReader inputFile = new FileReader("D:/data.txt");

您正在使用 Windows 文件系统 - Windows 中的路径需要使用\not /。尝试将路径更改为:

FileReader inputFile = new FileReader("D:\\data.txt");

编辑以检查data.txt用户名和密码:

将您的结构更改data.txt为更好的可读结构,例如,这是您可以在一个方案中检查多个用户的[user]:[password]方式:

数据.txt

约翰:pwd123

史蒂夫:WTFomgBBQ1

鲍勃:鲍勃

等等..然后你可以使用:

public boolean checkLogin(String userName, String password) throws IOException {
    
    BufferedReader bufferedReader = 
        new BufferedReader(new FileReader("D:\\data.txt"));
    
    String line;
    String[] currentPair;
    while((line = bufferedReader.readLine()) != null)
    {
        currentPair = line.split(":");
        if(currentPair[0].equals(userName) && currentPair[1].equals(password))
        {
            return true;
        }
    }
    return false;
}

因此,提交表单后您真正需要的一切就是检查:

String login = request.getParameter("login");
String password = request.getParameter("password");
if(checkLogin(login, password))
{
    response.sendRedirect(SUCCESS_URL);
}
else
{
    response.sendRedirect(BAD_PASS);
}
// SUCCESS_URL and BAD_PASS are URLs for your redirect
于 2013-11-13T08:22:00.827 回答
0

您是否将信息保存在文件中?如果用户没有写在第一行,密码写在第二行,它将失败。

您可以在第二行中添加 .else 的值a。您可以添加session.setAttribute ("login failed", "Your username or password is incorrect" + a),然后您可以看到文件中正在读取的内容。

于 2013-11-13T08:26:03.640 回答