gpt4 book ai didi

java - 如何以用户身份登录Java类(class)注册系统

转载 作者:太空宇宙 更新时间:2023-11-04 07:41:07 24 4
gpt4 key购买 nike

我正在使用 Web 项目在 Netbeans 上创建一个非常基本的类(class)注册表。我已经设法让学生可以通过填写注册表进行注册。输入的信息随后将保存到 Derby DB 中。现在我需要它来允许注册的学生登录以搜索要添加/删除的类(class)。

这是我的 RegServlet.java 文件代码,它接受用户输入并将其存储在数据库中:

public class RegServlet extends HttpServlet {
SaveToDB toDB = new SaveToDB();

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
try {
doStuff(request, response);
} catch (SQLException ex) {
Logger.getLogger(RegServlet.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (InstantiationException ex) {
Logger.getLogger(RegServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(RegServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}

public void doStuff(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, InstantiationException, IllegalAccessException, SQLException {
//see if search parameter is present
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
if(!userName.isEmpty()&&!passWord.isEmpty()&&!lastName.isEmpty()&&!firstName.isEmpty()&&!age.isEmpty()&& (sex=='F' || sex=='M') &&!email.isEmpty()) {
request.setAttribute("userName", userName);
request.setAttribute("passWord", passWord);

toDB.createConnection();
toDB.insertNewUser(userName, passWord, lastName, firstName, age, sex, email);
RequestDispatcher view = request.getRequestDispatcher("login.jsp");
view.forward(request, response);
} else {
RequestDispatcher view = request.getRequestDispatcher("index.jsp");
view.forward(request, response);
}
}

这是我的 newUser.jsp 文件:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New User Registration</title>
</head>
<body>
<form method="get" action="RegServlet">
<h1>Register!</h1>
Fill out information below:<p>

Username:
<input type="text" name="userName" value =""><p>
Password:
<input type="text" name="passWord" value =""><p>

<input type="submit" value="Finish!"><p>


<script type="text/javascript">
var var1 = "<%= (String) request.getAttribute("userName")%>";
if(var1 == (""))
document.write("<bSystem doesn't like an empty string.....Try Again!!!</b>");

var var2 = "<%= (String) request.getAttribute("passWord")%>";
if(var2 == (""))
document.write("<bSystem doesn't like an empty string.....Try Again!!!</b>");
</script>


</form>
</body>

这段jsp代码<form method="get" action="RegServlet">将我的代码链接到 RegServlet.java 文件,并在 RegServlet 类中,我使用 RequestDispatcher将用户发送到名为 login.jsp 的下一个页面以实际登录。

我需要有关 login.jsp 文件的一些帮助。这是我的 login.jsp 文件:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Page</title>
</head>
<body>
<form method="Login" action="RegServlet">
<h1>Login!</h1>
Username:
<input type="text" name="userName" value =""><p>
Password:
<input type="text" name="passWord" value =""><p>

<input type="submit" value="Login!"><p>
</body>

我有另一个名为 doLogin() 的方法在我的 RegServlet.java 类文件中 doStuff() 下我将在其中将用户名与存储在数据库中的密码进行匹配。如果用户名和密码匹配,我想为希望登录系统的学生启动一个 session ,以搜索也将存储在数据库中的类(class)。

我应该如何使用该方法doLogin() ?我应该在哪里实现这个方法?下doStuff()方法?或者其他类(class)?我应该如何开始身份验证过程?

在处理所有安全问题之前,我只是先练习基础知识。

最佳答案

首先,您不应该像现在在 newUser.jsp 中那样在 Javascript 中检查用户名和密码,您应该在服务器端执行此操作。该文本“系统不喜欢空字符串”应该来自对类的调用。当您像现在一样将密码打印到 javascript 中时,如果用户查看源代码,则该密码对用户可见。如果有人拦截流量,则不太安全。

此外,一旦您在 servlet 中验证了用户名/密码,您应该执行 response.sendRedirect 而不是转发。转发会将所有参数转发到下一页。您无需不断地将密码转发到每个页面。如果用户名/密码正确,则设置一个 session 变量,发送重定向到索引页面,然后在索引页面上拉取 session 变量并检查该人是否已登录,如果没有,则重定向回登录页面。

现在,不要在 session 变量中设置密码。那很糟。只需在 session 变量中设置用户名即可。对密码要更加小心。如果用户名/密码正确,则仅在 session 变量中设置用户名。然后在索引页面上,您可以从 session 中获取用户名,如果 session 中的用户名不为空或空白,则您知道该人已登录。否则,如果 session 中的用户名为空或空字符串,则您知道该人未登录,因此重定向到登录页面。

至于将 doLogin 与 doStuff 放在哪里,登录 servlet 实际上只需要验证登录,那么为什么不将 doStuff 重命名为 doLogin 并将所有代码都放在那里呢?

还有一件事:对于登录,您应该使用 POST 而不是 GET,因此在您的 servlet 中将 doGet 更改为 doPost,并在您的 login.jsp 中将 form 标记中的 method=POST 。您不希望用户密码在地址栏中可见(这就是 get 的作用)。 (表单标签中没有method=login这样的东西;它的me​​thod=post)

此外,对于密码文本框,请使用 type="password"而不是 type="text"。不同之处在于,type='password' 会在输入密码时隐藏密码。

关于java - 如何以用户身份登录Java类(class)注册系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16050488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com