JEE: Как остановить сопоставление URL? - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь предотвратить сопоставление URL.Только авторизованный пользователь сможет оценить страницу welcome.jsp.

Мой Login.java сервлет выглядит следующим образом:

package com.login;

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

@WebServlet("/Login")
public class Login extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uname=request.getParameter("uname");
        String pass= request.getParameter("pass");

    if(uname.equals("indrajith") && pass.equals("123")) {
        HttpSession session =request.getSession();
        session.setAttribute("username", uname);
        response.sendRedirect("welcome.jsp");
    }
    else {
        response.sendRedirect("login.jsp");
    }
    }


}

Моя login.jsp страница содержит следующую форму:

    <form action="Login">
        Enter username:<input type="text" name="uname"><br>
        Enter password:<input type="password" name="pass"><br>
        <input type="submit" value="login">
    <form>

На моей welcome.jsp странице I 'проверяя, какие данные введены пользователем,

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
    if(session.getAttribute("username")==null){
    response.sendRedirect("login.jsp");
}
%>
    welcome ${username}

</body>
</html>

Но моя проблема все еще заключается в том, что я могу перенаправлять URL-адреса независимо от того, вошел я в систему или нет.Я понятия не имею, что не так с моим кодом.В StackOverflow есть несколько похожих вопросов, но ответы не дают решения моей проблемы.

Заранее спасибо!

PS: я использую Tomcat 8.5.40 сEclipse IDE на моей 64-битной Windows-машине.

1 Ответ

1 голос
/ 04 мая 2019

Все, что вы напишите в .jsp, будет добавлено в метод, называемый _jspService() (короче говоря).После установки URL-адреса перенаправления вы должны использовать оператор return, чтобы остановить выполнение jvm остальной части кода.

Имейте в виду, что sendRedirect() это просто еще один метод для jvm, который добавляет Заголовок Location в ответе.


Обновите welcome.jsp

<%
    if(session.getAttribute("username") == null){
        response.sendRedirect("login.jsp");
        return; // add this statement
    }
%>

, и этот фрагмент кода лучше добавить вверху страницы.

...