【问题标题】:JEE: How to stop URL mapping?JEE:如何停止 URL 映射?
【发布时间】:2019-09-19 19:27:29
【问题描述】:

我正在尝试阻止 URL 映射。只有登录用户才能评估welcome.jsp 页面。

我的Login.java servlet如下,

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 页面中,我正在检查用户输入的数据是什么,

<%@ 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:我在 64 位 Windows 机器上使用 Tomcat 8.5.40 和 eclipse IDE。

【问题讨论】:

  • 您是否有理由创建自己的安全系统而不是 standard JEE security
  • 不,唯一的原因是我不知道如何实现该安全性。我是 java ee 的新手
  • HTTPsession 不是一种标准的方式吗?

标签: jsp servlets jakarta-ee url-routing httpsession


【解决方案1】:

您在.jsp 中写入的所有内容都将添加到一个名为_jspService() 的方法中(长话短说)。设置重定向url后,必须使用return语句来阻止jvm执行其余代码。

请记住,sendRedirect() 只是 jvm 的另一种方法,它在响应中添加 Location 标头。


更新您的welcome.jsp

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

最好在页面顶部添加这段代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多