【问题标题】:Can sendRedirect() act as a post method instead of get? - jsp/servletssendRedirect() 可以充当 post 方法而不是 get 吗? - jsp/servlet
【发布时间】:2012-12-26 10:17:37
【问题描述】:

我有一个接受用户名和密码的简单表单。如果登录有效,我必须使用sendRedirect() 方法将页面重定向到一个页面,如果登录无效,则重定向到另一个页面。我需要使用sendRedirect() 而不是forward(),因为其他页面位于另一台服务器中。我注意到在使用时

response.sendRedirect(response.encodeRedirectURL("FileName.jsp?paramName=" +value));

sendRedirect() 正在使用GET 方法,因为 URL 中显示了 name=value。这对我来说是不可取的,因为出于安全原因,我不希望这些值显示在 URL 中。

有没有办法使用 sendRedirect() POST 这些值? 我尝试使用 POST 方法创建一个表单,它隐藏了我需要的值但仍然没有运气

请问我该怎么办?谢谢:)

【问题讨论】:

    标签: jsp redirect post get


    【解决方案1】:

    不,这是不可能的。我看到的唯一(肮脏)解决方法是转发到包含隐藏表单(使用 POST 方法)和提交此表单的 JavaScript 脚本的内部页面。

    【讨论】:

      【解决方案2】:

      这有点老了,但在这里我成功地运行了这个:

      response.setStatus(307); //this makes the redirection keep your requesting method as is.
      response.addHeader("Location", "http://address.to/redirect");
      

      请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.8 了解 HTTP 307 状态代码的说明。

      【讨论】:

      • 非常好。虽然参考声明...the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user...
      【解决方案3】:

      使用 javascript

      $('#inset_form').html('<form action="FlowService" name="form" method="post" style="display:none;"><input type="hidden" name="idapp" value="' + idApp + '" /></form>');
              document.forms['form'].submit();
      

      【讨论】:

        【解决方案4】:

        不,HTTP 重定向将始终对目标页面使用 GET。

        但是,无论如何,POST 数据并不比 GET 数据安全得多。用户仍然可以篡改它们。而是将它们存储在会话中。

        【讨论】:

        • 但如果我将它们存储在会话中,它们还会显示在 URL 中吗?抱歉,我对 Web 技术很陌生
        • 会话没有帮助,因为你想重定向到另一个服务器上的另一个 web 应用程序。
        • 他可以以某种共享的方式实现它们。除非两者都在同一个域上,否则这很棘手,但这是可能的。
        • * 她:P 你是什么意思以某种共享的方式实现它们? @ThiefMaster
        【解决方案5】:

        检查一次:

        String url = "http://www.mysite/servlets/theServlet";
        RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
        dispatcher.forward(request, response);
        

        【讨论】:

        • 我无法使用转发,因为其他页面位于另一台服务器上!
        • 据我所知,这几乎是不可能的......对不起。
        【解决方案6】:

        在不提供任何参数的情况下使用 sendredirect,并将这些参数隐藏在会话范围的 servlet 中,如果您在重定向页面中需要这些参数,请通过此 servlet 使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多