我在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参数传递它)
请为我的任何一种方法提供一些建议。任何想法都受到欢迎。
答案 0 :(得分:0)
没有“隐藏属性”这样的东西 - 它可以很容易地提取和伪造。如果要使其安全,则需要使用会话。工作流程非常简单:
在LoginServlet中验证用户。将身份验证令牌(如loginId)保存到会话中。
HttpSession session = request.getSession(true);
session.setAttribute("login", loginId);
将用户重定向到应用页面。
response.sendRedirect("/gwtPage.jsp");
在此JSP中,从会话中检索身份验证令牌。如果不存在,则重定向回登录页面。如果存在,请继续加载应用程序。
HttpSession session = request.getSession(true);
if (session == null || session.getAttribute("login") == null) {
response.sendRedirect("/Login.jsp");
}
确保您的服务器上启用了会话。