Acegi / SpringセキュリティはgetUserPrincipal()をサポートしていますか?
-
10-07-2019 - |
質問
既存のアプリケーションをAcegi / Springセキュリティとインターフェイスさせる必要があります。
始めるために、1つの簡単な情報を探しています。このコンテキストでは、アプリケーションから呼び出されるHttpServletRequest.getUserPrincipal()は、Spring固有のオブジェクトを使用するのではなく、Springを通じて取得したユーザー名を適切に返しますか?これに関して矛盾する情報をGoogleで検索しました。
Acegiにフィルターが実装されている場合、サーブレットAPIのgetUserPrincipal()をオーバーロードできると思いますか?
補助的な質問:デフォルトでこれが当てはまらない場合、オンにする方法はありますか?
ありがとう、
-Erik
解決
前のユーザーが答えを持っているので、春のセキュリティはgetUserPrincipalとisUserInRoleをサポートしています。これが、春のセキュリティの仕組みです。
スプリングを設定すると、次のフィルターをロードできます:
http:// static。 springframework.org/spring-security/site/reference/html/ns-config.html#filter-stack
標準のフィルター構成の一部として、 SecurityContextHolderAwareRequestFilter
フィルターがロードされます。
HttpServletRequest
オブジェクトをラップして、 HttpServletRequest
を実装する HttpServletRequestWrapper
を拡張する SecurityContextHolderAwareRequestWrapper
クラスに変更することがわかります。 >そして、標準のServlet Filter doFilterチェーンにフィードバックします。 Spring Securityフィルターは最初のフィルターとして 構成する必要があるため、以降のすべてのクラスでは、代わりに SecurityContextHolderAwareRequestWrapper
が表示されます。これには、このフィルターの背後にあるJSPページまたはサーブレットが含まれます。
JSPページ、サーブレット、またはこのフィルターの背後にあるフレームワークから isUserInRole
または getUserPrincipal
を呼び出すと、 HttpServletRequest
Spring Securityからの実装。
他のヒント
セキュリティフィルターを使用する場合、はい。これがデフォルトの動作だと思います。
どのクラスを取得するかは設定によって異なりますが、それらはすべて、Spring独自のorg.springframework.security.Authenticationインターフェースを介してプリンシパルインターフェースを実装します。
Springアプリケーションでrequest.getUserPrincipal()およびrequest.isUserInRole()を使用しましたが、JSP内でもシームレスに動作します。
Spring Securityは、この情報をリクエストではなくSecurityContextに保存すると考えています。この情報をリクエストに追加するように設定できるFilterSecurityInterceptorを簡単に作成できます。