前提・実現したいこと
Apacheのリバースプロキシを経由したリクエストの元々の(書き換え前の)RequestURLやRequestURIを取得したい。
(例)ユーザーが「http://my-app.com/test/url」にアクセスしてきた際、下記コード等にて「http://my-app.com/test/url」の文字列を取得したい。
Java
1String requestURL = new String(request.getRequestURL());
発生している問題・エラーメッセージ
①Apache httpd.confにて以下のプロキシ設定を行う。
ProxyPass /test/url ajp://○○○.○○○.○○○.○○○:○○○○/TestApp/ ProxyPassReverseCookiePath /TestApp /test/url/ ProxyPassReverse /test/url ajp://○○○.○○○.○○○.○○○:○○○○/TestApp/
②Servlet内で以下の処理を行う。
String requestURL = new String(request.getRequestURL());
③「http://my-app.com/test/url」へアクセスする。
取得したい文字列:http://my-app.com/test/url 実際に取得されてしまう文字列:https://○○○.○○○.○○○.○○○/TestApp/
試したこと
①Apache httpd.confに以下のような記述を追加
#追記1 RequestHeader set TestHeader "TestHeaderValue" #追記2 RewriteEngine On #追記3 RewriteCond %{REQUEST_URL} (.*) RewriteRule .* - [E=X_REQUEST_URL:%1] RequestHeader Set X-Request-URL %{X_REQUEST_URL}e #追記4 RewriteCond %{REQUEST_URI} (.*) RewriteRule .* - [E=X_REQUEST_URI:%{REQUEST_URI}] RequestHeader Set X-Request-URI "%{X_REQUEST_URI}e" #追記5 ProxyPreserveHost On
②Servlet内で以下の処理を追加
java
1System.out.println("TestHeader :" + request.getHeader("TestHeader")); 2System.out.println("X-REQUEST-URL :" + request.getHeader("X-REQUEST-URL")); 3System.out.println("X-REQUEST-URI :" + request.getHeader("X-REQUEST-URI"));
③出力結果
// 正しくヘッダに追加され、値が取得できている。 TestHeader :TestHeaderValue // 値が「(null)」となってしまう X-REQUEST-URL :(null) // 値が「(null)」となってしまう X-REQUEST-URI :(null)
調べると、上記の方法でRequestURIやRequestURLが取得出来ているという記述が見つかるのですが、
望んでいる動作となりません。
アドバイス頂けると幸いです。
質問に不備等ありましたら修正致しますので、ご指摘お願い致します。
補足情報(FW/ツールのバージョンなど)
・CentOS 7.4.1708
・Apache Httpd 2.4.6
・Tomcat 9.0.5
・OpenJDK 1.8.0_151
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/26 08:25