2012-05-08 6 views
1

パブリックドメインで動作する1つのサーブレットで、request.getRequestURL()メソッドから異常な文字列ログが取得されました。私は詳細を記録し続け、 "http://answers.yahoo.com"というエントリを見つけました。どのように起こったのか、それを達成する方法を分析するのに役立つ人もいます。理想的には、ログは、ユーザまたはデバイスがサーブレットを呼び出す際に使用するブラウザのURLアドレスである必要があります。 IPにマッピングされたサーバーの登録名がhttp://www.alphabeta.com/x_serv?a=2ある場合Java Servlet request.getRequestURL()に異常な文字列が記録されました

例えば、ログが正確にログに記録するかどうalphabeta.com

答えて

0

すべきですか?

ホスト名のみが必要な場合は、javax.servlet.ServletRequestのメソッドgetServerName()を使用してください。要求が送信されたサーバーのホスト名を返します。

getServerName()と、getServletPath()という方法を併用すると、サーブレットの原因となったパラメータを指定せずにURLを取得できます。インターフェイスjavax.servlet.http.HttpServletRequestgetServletPath()メソッドは、このリクエストのURLのうちサーブレットを呼び出す部分を返しますが、余分なパス情報やクエリ文字列は返しません。

そして、次のコードは、あなたのページの絶対URLを決定します: URLクラスがパッケージ java.netからである

String uri = request.getRequestURI(); 
if (request.getQueryString() != null) { 
    uri += '?' + request.getQueryString(); 
} 
URL reconstructedUrl = new URL(request.getScheme(), 
          request.getServerName(), 
          request.getServerPort(), 
          uri); 
logger.info("The full URL: " + reconstructedUrl.toString()); 

+0

私は、リクエストURLがどのようにスプーフィングされるのかを知りたいと思っています。ここで起こったようです。 –

+0

あなたはこの問題に対する私のソリューションが気に入らないのですか? – kapand

+0

あなたは「正確に何をしたいですか?」と尋ねました。 - 私は、OPがgetRequestURLから返されたURLをどうやって偽装することが可能か知りたかったと思っていました。私はただ助けようとしていた。私のコメントを無視してください。 –

関連する問題