sendRedirect()能否作为POST方法而不是GET方法使用?- JSP / Servlets

20

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

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

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

是否有办法使用 sendRedirect() 方法来进行 POST 传值?我尝试使用 method 为 POST 的表单隐藏需要传递的值,但仍无法成功。

请问该怎么做呢?谢谢 :)

6个回答

15

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


10

1
非常好。尽管参考文献说明“...用户代理程序不能自动重定向请求,除非可以得到用户的确认...” - Hugo Baés

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

看看这个:

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

我无法使用转发,因为其他页面位于另一台服务器上! - Bernice
1
根据我的了解,这几乎是不可能的...抱歉。 - Suresh Atta

0

不,HTTP重定向总是使用GET请求目标页面。

然而,POST数据并不比GET数据更安全。用户仍然可以篡改它们。最好将它们存储在会话中。


但是如果我将它们存储在会话中,它们是否仍然会显示在URL中?抱歉,我对Web技术非常陌生。 - Bernice
1
这个会话不会有帮助,因为你想要重定向到另一个位于另一台服务器上的 Web 应用程序。 - JB Nizet
他可以以某种共享的方式实现它们。除非两者在同一域上,否则这很棘手,但是这是可能的。 - ThiefMaster
她:P 你是什么意思,以某种共享的方式实现它们?@ThiefMaster - Bernice

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接