1

私のJavaEEWebアプリケーションでは、問題があります。次のように記述したSpringコントローラーを使用して、ページAを別のページBにリダイレクトする必要があります。

ページAは私のブラウザ用です(http内):

      http://MYPUBLICSERVERNAME/MYCONTEXT/A.do :

SpringコントローラーであるAには、リダイレクト用の次のコードがあります。

@RequestMapping(method = RequestMethod.GET, value = "/A.do")
public String searchProfiles(){
....
return "redirect:/B.html";
}

httpで完全に機能します。だから私はBに行きます:

  http://MYPUBLICSERVERNAME/MYCONTEXT/B.html

HTTPSではリバースプロキシがリクエストをインターセプトするため、HTTPSで問題が発生します。

このプロキシは同じマシン上にあり、次のようになります。

私が行くときのために接続することは不可能です:

httpS://MYPUBLICSERVERNAME/MYCONTEXT/A.do

私はにリダイレクトされることを期待していました:

httpS://MYPUBLICSERVERNAME/MYCONTEXT/B.html

代わりに、ブラウザはにリダイレクトされます

 http://localhost/MYCONTEXT/B.html

サーバーの場合、クライアントはもちろんブラウザではなくリバースプロキシであることを理解しています。

だから私の質問は:サーブレットが元のサーバー名を取得するにはどうすればよいですか?つまり、Webブラウザ(MYPUBLICSERVERNAME)とプロトコル(HTTPSの場合はHTTPS)に示されているサーバー名です。

回避策は、ブラウザがMYPUBLICSERVERNAMEしか認識していないため、ブラウザからフィードされたCookieを使用することですが、より洗練されたソリューションが存在する可能性がありますか?

もちろん、期待されるプロトコルとサーバー名で魔法のようにリダイレクトできるSpring関数を知っていれば、それも問題ありませんが、見つかりませんでした。

ご回答有難うございます

4

1 に答える 1

2

パスとプロトコル全体でリダイレクトを使用できます

   return "redirect:https://MYPUBLICSERVERNAME/MYCONTEXT/B.html"

リクエストでreffererヘッダーを使用できるかどうかわかりません(プロキシはreffererを変更しますか?)

String referrer = request.getHeader("referer");
于 2013-03-27T09:47:14.487 に答える