getRemoseUser () возвращает значение null с помощью простой html-формы для входа - PullRequest
0 голосов
/ 22 октября 2019

Я новичок в веб-технологиях, и я борюсь с отслеживанием сеансов, в частности с аутентификацией пользователей.

У меня есть html-страница:

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <p>Click
        <a href="login.jsp">here</a>
        to authenticate.</p>
    </body>
</html>

, которая перенаправляетна следующий 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 JSP Page</title>
    </head>
    <body>
        <form action="LoginServlet" method="POST">
            <input type="text" name="username">
            <input type="password" name="password">
            <input type="Submit" value="Conferma">
        </form>
    </body>
</html>

, где LoginServlet сервлет получил следующий метод:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {
        /* TODO output your page here. You may use following sample code. */
        String paramUser = request.getParameter("username");
        String paramPassword = request.getParameter("password");

        if(paramUser.equals("demo") && paramPassword.equals("demo")){
            // Success
            // Invalid session if existing
            HttpSession oldSession = request.getSession(false);
            if(oldSession != null)
                oldSession.invalidate();
            HttpSession currentSession = request.getSession(); // Creates new session
            currentSession.setAttribute(u, paramUser);
            currentSession.setAttribute(p, paramPassword);
            response.sendRedirect("success.jsp");
        }
        else{
            // Failed authentication
            response.sendRedirect("login.jsp");
        }
    }
}

Чьи результаты отображаются в следующем представлении:

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Success Page</title>
    </head>
    <body>
         <p>Hello</p>
         <a href="LogoutServlet">logout</a>
         <%= request.getRemoteUser() %> <%--RETURN NULL--%>
    </body>
</html>

Но, к сожалению, в представлении jsp request.getRemoteUser() возвращает null, и я не знаю почему (и я хочу, чтобы он отображал "demo" (имя зарегистрированного пользователя).

  • Кто-нибудь может объяснить?

1 Ответ

0 голосов
/ 22 октября 2019

Просто установив произвольные атрибуты в сеансе, контейнер (tomcat) не будет произвольно и волшебным образом узнавать пользователя.

Вам нужно будет делегировать аутентификацию tomcat, чтобы запрос мог быть правильно инициализирован. Спецификация сервлета называет его «Контейнерная безопасность», поэтому он стандартизирован. Документация Tomcat содержит все необходимые указатели - они включают в себя настройку области и изменение вашей реализации, чтобы она указывала на другой URL-адрес входа в систему - и не обрабатывали его. Вы больше не увидите пароль пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...