3

リダイレクトする一連のルールを作成しました

http://server.com/application/c/<UserIdValue>

宛先の URL のタイプ

http://localserver.com/application/?userid=<UserIdValue>

私はApache httpd.confに次のルールを書きました

<Location  /application>
  ProxyPassReverse http://server.com/application/ 
  RewriteEngine On

  RewriteCond %{REQUEST_URI} /c/ [NC]
  RewriteRule application/c/(.*)$ http://localserver.com/application/?userid=$1 [QSA,P]

これにより、アプリケーションのログインページや他のページにアクセスできますが、アプリケーションでログイン/ログアウトしようとすると、「localserver」の場所に侵入します。

問題は春のセキュリティにありj_spring_security_check, j_spring_security_logoutます。私はこれのために何をすべきか分かりません。

Spring セキュリティはプロキシ パスよりも優先されます!!!!!

4

1 に答える 1

1

これを機能させるには、次の 2 つの点を変更する必要があります。

  1. ProxyPass / ProxyPassReverse の行を末尾の / で終わらないように変更します。
  2. アプリケーション サーバーに contextURL を正しく設定するように指示します (ProxyPassReverse はフォームの URI を変更しません)。Tomcat を使用している場合は、conf/server.xml を編集し、属性 protocol="HTTP/1.1" を持つタグを見つけて、次の 2 つの新しい属性を追加します: proxyHost="localserver.com" proxyPort=" 80" (localserver.com と server.com が同じポートで実行されている場合、proxyPort="80" は厳密には必要ありません)。

問題 1 の原因は、Spring Security が URI を正規化しないため、プロキシがアプリケーション サーバーにhttp://server.com/application//j_spring_security_checkのような URI を与える場合、Spring Security インターセプターはそれをhttp:/と照合します。 /server.com/application/j_spring_security_check、余分なスラッシュのために異なることに注意し、リクエストの傍受を拒否します。

于 2013-07-23T09:28:48.013 に答える