Как избежать этой страницы входа в javaservlet? - PullRequest
0 голосов
/ 19 марта 2020

Я разрабатываю веб-приложение на localhost, используя java. Он использует аутентификацию на основе форм. Мой сайт называется 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 (сервлет)

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>

}

Аутентификатор. java (не сервлет)

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, где я хочу go. И когда я дал неправильную информацию, он просит меня снова ввести имя пользователя и пароль. Все нормально

Но проблема в том, что когда я ввел следующий URL-адрес вручную, он перенаправляет меня на страницу приветствия. jsp страница без имени пользователя или пароля

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

По какой причине происходит что-то подобное. И что мне делать, чтобы избежать этой ошибки безопасности

1 Ответ

2 голосов
/ 19 марта 2020

Ну, ответ вполне ясен. Когда вы вводите URL-адрес вручную, он будет обрабатываться как запрос GET и будет вызываться метод doGet().

Если вы этого не хотите, внутри вашего doGet() перенаправьте страницу на страницу входа, чтобы если кто-то попытается ввести URL-адрес вручную, он будет перенаправлен на страницу входа

Тогда внутри вашей функции doPost, т.е. вместо вызова функции doGet(), когда учетные данные просто перенаправляют ее на домашнюю страницу или страницу приветствия

...