gpt4 book ai didi

java - 如何避免这个java servlet登录页面的安全问题

转载 作者:行者123 更新时间:2023-12-02 01:00:14 25 4
gpt4 key购买 nike

我正在使用 java 在 localhost 中开发一个 Web 应用程序。它使用基于表单的身份验证。我的网站的名称是 web-db-manager。我使用 TomEE 7.0 和 jdk 8

这是我的代码

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<center><h1>Hello World!</h1></center>
<form action="Controller" method="post">

<center>

<div>
<table>
<tr>
<td>
<input type="text" class="form-control" name="username">
</td>
</tr>

<tr>
<td>
<input type="password" class="form-control" name="password">
</td>
</tr>

<tr>
<td>
<input type="submit" class="btn btn-success" value="login">
</td>
</tr>
</table>

</div>
</center>



</form>
</body>
</html>

Controller.java(servlet)

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



@WebServlet(urlPatterns = {"/Controller"})
public class Controller extends HttpServlet {
private Authenticator auth = new Authenticator();


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.sendRedirect("Welcome.jsp");
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");

if(auth.match(username, password)) {
doGet(request,response);
}
else {
request.setAttribute("error", "Unknown user, please try again");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}


@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>

}

Authenticator.java(不是 servlet)

public class Authenticator {
private String username;
private String password;

public Authenticator(){
this.username="administrator";
this.password="admin";
}

public Boolean match(String user,String pass){
if(user.equals(this.username) && pass.equals(this.password)){
return true;
}else{
return false;
}
}
}

当我提供正确的用户名和密码时,我工作得很好,它会将我重定向到我想去的 Welcome.jsp 页面。当我提供了错误的信息时,它会要求我再次输入用户名和密码。没关系

但问题是,当我手动输入以下网址时,它会将我重定向到 Welcome.jsp 页面没有任何用户名或密码

http://localhost:8080/web-db-manager/Controller

发生这样的事情的原因是什么。我应该怎样做才能避免这个安全错误

最佳答案

嗯,答案很明确。当您手动输入 url 时,它将被视为 GET 请求,并调用 doGet() 方法。

如果您不希望这样做,请在 doGet() 中将页面重定向到您的登录页面,这样如果有人尝试手动输入网址,它将被重定向到登录页面

然后在你的 doPost 函数中,即当凭证匹配时不调用 doGet() 函数,而是直接将其重定向到主页或欢迎页面

关于java - 如何避免这个java servlet登录页面的安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60756635/

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