我有一个简单的表单,它接受用户名和密码。如果登录有效,我必须使用
sendRedirect()
方法将页面重定向到一个页面,如果登录无效则重定向到另一个页面。我需要使用 sendRedirect()
而不是 forward()
,因为其他页面位于另一台服务器中。我在使用时注意到
response.sendRedirect(response.encodeRedirectURL("FileName.jsp?paramName=" +value));
sendRedirect()
正在使用GET
方法,因为名称=值显示在URL中。这对我来说是不可取的,因为出于安全原因我不希望这些值显示在 URL 中。
有没有办法使用 sendRedirect() 来
POST
这些值?
我尝试使用方法 POST
制作一个表单,该方法隐藏了我需要的值,但仍然没有运气
请问我能做什么?谢谢:)
不,这是不可能的。我看到的唯一(脏)解决方法是转发到包含隐藏表单(使用 POST 方法)和提交此表单的 JavaScript 脚本的内部页面。
这有点旧,但我在这里成功运行了:
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 状态代码的说明。
使用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();
不,HTTP 重定向将始终使用 GET 来获取目标页面。
但是,无论如何,POST 数据并不比 GET 数据安全多少。用户仍然可以篡改它们。将它们存储在会话中。
检查一次:
String url = "http://www.mysite/servlets/theServlet";
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
使用 sendredirect 而不提供任何参数,并将这些参数隐藏在会话范围的 servlet 中,如果您在重定向页面中需要这些参数,请通过此 servlet 使用它们。
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);
}