Java servlet HttpSession似乎不能立即工作

时间:2017-12-29 12:40:09

标签: java jsp redirect servlets

在我的登录servlet中,doPost的最后一个代码如下:

HttpSession session = request.getSession();
session.setAttribute(Config.CURRENT_USER_PARAMETER, user);
request.getRequestDispatcher("app.jsp").forward(request, response);

app.jsp的内容如下:

<%@page import="fi.vakuutustiedot.controllers.Config"%>
<%@page import="fi.vakuutustiedot.model.User"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
    if (session == null) {
        request.getRequestDispatcher("index.html").forward(request, response);
        return;
    }

    User user = (User) session.getAttribute(Config.CURRENT_USER_PARAMETER);

    if (user == null) {
        session.invalidate();
        request.getRequestDispatcher("index.html").forward(request, response);
        return;    
    }
%>
<!DOCTYPE html>
...

我的问题是以下情况:

  1. 我通过连接到我的登录servlet的HTML表单登录。
  2. 登录servlet创建HttpSession并为描述相关用户的对象添加属性。
  3. 最后,它转发到app.jsp
  4. 问题在于,当我被记录并转发到app.jsp时,如果我键入{{1},我会看到我应该看到的所有内容, 但是 在位置栏中按Enter键重定向到.../app.jsp!但是,当我访问index.html第二,第三,。等时间时,一切都很好,没有虚假的重定向到app.jsp

    从安全角度来看,此解决方案是否足够?

    我通过在登录servlet中添加以下行来解决了这个问题:

    index.html

    HttpSession session = request.getSession(); request.setAttribute(Config.CURRENT_USER_PARAMETER, user); // <- The new added line. session.setAttribute(Config.CURRENT_USER_PARAMETER, user); request.getRequestDispatcher("app.jsp").forward(request, response); 我有:

    app.jsp

    回答我自己的问题

    在登录servlet中,我所做的只是:

    <%@page import="fi.vakuutustiedot.controllers.Config"%>
    <%@page import="fi.vakuutustiedot.model.User"%>
    <%@page import="fi.vakuutustiedot.model.UserType"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%! User user = null; %>
    <%
        if (session == null) {
            request.getRequestDispatcher("no_session.html").forward(request, response);
            return;
        }
    
        user = (User) session.getAttribute(Config.CURRENT_USER_PARAMETER);
    
        if (user == null) {
            user = (User) request.getAttribute(Config.CURRENT_USER_PARAMETER);
        }
    
        if (user == null) {
            request.getRequestDispatcher("test.jsp").forward(request, response);
            return;
        }
    %>
    <!DOCTYPE html>
    ...
    

    这样,用户对象可直接从HttpSession session = request.getSession(); session.setAttribute(Config.CURRENT_USER_PARAMETER, user); response.sendRedirect("app.jsp"); 获得,我不需要将该用户放入请求对象。

1 个答案:

答案 0 :(得分:0)

您似乎正试图访问上下文之外的页面。

根据您的问题,我只猜测您的目录是: /index.html /app.jsp

当您运行应用程序时,您可能会使用以下URI: http://[my_server]/[my_app]/index.html 要不就: http://[my_server]/[my_app]/

当你输入../app.jsp时,你正试图得到一些不存在的东西。您的服务器可能设置为发送index.html的默认页面,没有默认错误页面。

我猜你刚刚回到index.html页面,因为URI不正确。