【问题标题】:Request forwarding to GWT hosted page not working请求转发到 GWT 托管页面不起作用
【发布时间】:2015-02-19 12:31:03
【问题描述】:

我在 html 中创建了一个登录页面,该页面将表单提交给 servlet(LoginServlet)。

验证成功后,我已将请求转发到加载 nocache.js 脚本的 gwtPage.jsp

方法一: 下面是我的 LoginServlet 代码

request.setAttribute("loginId",loginId);
dispatcher = request.getRequestDispatcher("gwtPage.jsp");
dispatcher.forward(request, response);

在我的 gwtPage 上,我已包含以下脚本

<script type="text/javascript" language="javascript" src="pc/pc.nocache.js?<%= new Date()%>"></script>

但是,在从 LoginServlet 成功认证后,应用程序指向 gwtPage.jsp 但不加载 GWT 模块。 可能是因为认证后url显示:http://127.0.0.1:8888/LoginServlet

方法二: 我尝试了另一种方法,使用 response.sendRedirect 方法。

LoginServlet 代码

response.sendRedirect("gwtPage.jsp?gwt.codesvr=127.0.0.1:9997");

它正确指向http://127.0.0.1:8888/gwtPage.jsp?gwt.codesvr=127.0.0.1:9997 但是,我无法发送隐藏属性(我不想通过 URL 参数传递它)

请为我的任何一种方法提供一些建议。欢迎任何想法。

【问题讨论】:

  • 您是否尝试过使用浏览器的开发工具查看使用方法 1 时网络请求/响应的结果?
  • 使用 Approach 1 ,它只加载 gwtPage.jsp 而没有 div 上的 GWT 模块。

标签: jsp servlets gwt httprequest httpresponse


【解决方案1】:

没有所谓的“隐藏属性”——它可以很容易地被提取和伪造。如果要使其安全,则需要使用会话。工作流程非常简单:

  1. 在您的 LoginServlet 中验证用户。将身份验证令牌(如您的 loginId)保存到会话中。

    HttpSession session = request.getSession(true);
    session.setAttribute("login", loginId);
    
  2. 将用户重定向到应用页面。

    response.sendRedirect("/gwtPage.jsp");
    
  3. 在此 JSP 中,从会话中检索身份验证令牌。如果不存在,则重定向回登录页面。如果存在,请继续加载应用程序。

    HttpSession session = request.getSession(true);
    if (session == null || session.getAttribute("login") == null) {
        response.sendRedirect("/Login.jsp");
    }
    

    确保在您的服务器上启用会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2017-03-06
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多