複数のドメインから提供されているTomcatアプリがあります。以前の開発者は、アプリケーションのURLを返すメソッドを作成しました(以下を参照)。メソッドでは、サーバー名(request.getServerName()
)を要求します。サーバー名は、適切に、httpd.confファイルからServerNameを返します。
しかし、私はそれを望んでいません。私が欲しいのは、ブラウザがリクエストを送信したホスト名、つまりブラウザがアプリケーションにアクセスしているドメインです。
getHeader("Host")
を試しましたが、それでもhttpd.confファイルに設定されているServerNameが返されます。
request.getServerName()
の代わりに、ブラウザがリクエストを送信したサーバー名を取得するには何を使用すればよいですか?
例えば:
www.yourserver.net[〜#〜] not [〜#〜]www.myserverを返す必要があります。ネット。 request.getServerName()
呼び出しはwww.myserver.netのみを返すようです
/**
* Convenience method to get the application's URL based on request
* variables.
*
* @param request the current request
* @return URL to application
*/
public static String getAppURL(HttpServletRequest request) {
StringBuffer url = new StringBuffer();
int port = request.getServerPort();
if (port < 0) {
port = 80; // Work around Java.net.URL bug
}
String scheme = request.getScheme();
url.append(scheme);
url.append("://");
url.append(request.getServerName());
if (("http".equals(scheme) && (port != 80)) || ("https".equals(scheme) && (port != 443))) {
url.append(':');
url.append(port);
}
url.append(request.getContextPath());
return url.toString();
}
前もって感謝します!
httpd
がクライアントから提供されたHost
ヘッダーをTomcatに渡すことを確認する必要があります。最も簡単な方法(mod_proxy_http
を使用していると仮定-あなたが言っていない)は、次の方法です。
ProxyPreserveHost On
このデモJSPで行ったようなものを使用してみませんか?
<%
String requestURL = request.getRequestURL().toString();
String servletPath = request.getServletPath();
String appURL = requestURL.substring(0, requestURL.indexOf(servletPath));
%>
appURL is <%=appURL%>
多分この質問とは関係ありません。 Tomcatを使用している場合は、リクエストヘッダーに任意のホスト文字列を指定できます。<script>alert(document.cookie);</script>
のようなJavaScriptも指定できます。
次に、ページに表示できます。
<p> Host name is : <%= request.getServerName() %> </p>
したがって、使用する前に検証する必要があります。