【问题标题】:Redirect page to custom page instead of default saying "web page has expired" upon using back/forward button使用后退/前进按钮时将页面重定向到自定义页面,而不是默认说“网页已过期”
【发布时间】:2012-04-02 06:13:37
【问题描述】:

我正忙于一个只有一页的网站,只有在登录后才能访问:home.jsp。一旦用户使用有效会话登录,如果他按下浏览器上的后退按钮,那么他应该被重定向到login.jsp,如果他按下浏览器的前进按钮,他应该再次重定向。他应该无法在不登录的情况下到达home.jsp。所以在做了一些搜索之后,我已经实现了:

<%
response.setHeader ( "Cache-Control","no-cache,no-store,must-revalidate");

response.setHeader("Pragma","no-cache");

response.setDateHeader ( "Expires", 0)
%>

home.jsp 页面上,按下前进按钮后,显示网页已过期,但我正在寻找的是我的自定义页面,类似于sessionExpired.jsp 说再次登录...

请帮我解决这个问题。

【问题讨论】:

    标签: jsp servlets


    【解决方案1】:

    实现Post-Redirect-Get 模式。因此,每次最终用户发送(成功)POST 请求时,都会向目标页面发送重定向。这样后退按钮将指向重定向的 GET 请求而不是 POST 请求(显然已过期,因为您指示浏览器不缓存它)。

    例如在您处理登录的doPost() 方法中:

    User user = userService.find(username, password);
    
    if (user != null) {
        request.getSession().setAttribute("user", user);
        response.sendRedirect("nextpage.jsp"); // Here, you need to send a redirect to landing page after login.
    }
    

    【讨论】:

    • @BalusC-- 谢谢,我可以在 RequestDispacther 方法中使用相同的逻辑,我将通过 rdObj.forward(request,response)---RequestDispacther 对象来定位。 ???
    • 这不会发送重定向。它发送一个转发。你明白其中的区别吗?
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2013-12-26
    • 2012-09-11
    相关资源
    最近更新 更多