sendRedirect() 可以充当 post 方法而不是 get 吗? - jsp/servlet

问题描述 投票:0回答:7

我有一个简单的表单,它接受用户名和密码。如果登录有效,我必须使用

sendRedirect()
方法将页面重定向到一个页面,如果登录无效则重定向到另一个页面。我需要使用
sendRedirect()
而不是
forward()
,因为其他页面位于另一台服务器中。我在使用时注意到

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

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

有没有办法使用 sendRedirect() 来

POST
这些值? 我尝试使用方法
POST
制作一个表单,该方法隐藏了我需要的值,但仍然没有运气

请问我能做什么?谢谢:)

jsp redirect post get
7个回答
16
投票

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


12
投票

这有点旧,但我在这里成功运行了:

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 状态代码的说明。


2
投票

使用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();

0
投票

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

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


0
投票

检查一次:

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

0
投票

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


0
投票

response.sendRedirect 使用 GET。您可以使用 JavaScript 解决方法从 servlet 发送 POST 重定向。

   public final void handleRequest(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {


   //  GET Redirect
    //response.sendRedirect(url + "?parameter_name=" + parameter_value);

    //POST redirect through JS
    String htmljs_code = "<!DOCTYPE html><html><head></head><body><script>var form = document.createElement('form'); document.body.appendChild(form); form.method = 'post'; form.action = '" +
              url + "'; var input = document.createElement('input'); input.type = 'hidden'; input.name = 'parameter_name'; input.value ='" +
                    parameter_value + "'; form.appendChild(input);form.submit();</script></body>";

    response.getOutputStream().println(htmljs);

}
© www.soinside.com 2019 - 2024. All rights reserved.