ユーザー名とパスワードを受け入れる単純なフォームがあります。ログインが有効な場合はページにリダイレクトし、そうでない場合は別のページにリダイレクトするには、ページのsendRedirect()
メソッドを使用する必要があります。他のページは別のサーバーにあるため、sendRedirect()
ではなくforward()
を使用する必要があります。使用しているときに気づいた
_response.sendRedirect(response.encodeRedirectURL("FileName.jsp?paramName=" +value));
_
name = valueがURLに表示されているため、sendRedirect()
はGET
メソッドを使用しています。安全上の理由から、これらの値を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 307ステータスコードの説明については、 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.8 を参照してください。
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();
これを一度チェックしてください:
String url = "http://www.mysite/servlets/theServlet";
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
いいえ、HTTPリダイレクトはターゲットページに対して常にGETを使用します。
ただし、POSTデータはGETデータより安全ではありません。ユーザーはデータを改ざんすることができます。代わりにセッションに保存してください。
パラメータを指定せずにsendredirectを使用し、セッションスコープのサーブレットでそれらのパラメータを非表示にします。リダイレクトされたページでこれらのパラメータが必要な場合は、このサーブレットを介して使用します。