请求转发到GWT托管页面不起作用

时间:2015-02-19 12:31:04

标签: jsp servlets gwt httprequest httpresponse

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

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

方法1: 以下是我的 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模块。 可能是因为验证后网址显示:http://127.0.0.1:8888/LoginServlet

方法2: 我尝试了一种替代方法,使用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 个答案:

答案 0 :(得分:0)

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

  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");
    }
    

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