Javaには、リフレクションまたはその他の手段を介して、サブクラスの対応するオーバーライドされたメソッドからスーパークラスのメソッドで宣言されたローカル変数にアクセスする方法がありますか?
具体的には、SpringSecurityので作業していDefaultLdapAuthoritiesPopulator
ます。このクラスには、getAdditionalRoles
サブクラスがユーザーに追加のロールを返すためにオーバーライドできるとドキュメントに記載されている名前のメソッドがあります。
getGrantedAuthorities
このクラスは、実際にメソッドを呼び出すメソッドも実装しgetAdditionalRoles
ます。ソースコードは次のようになります。
public final GrantedAuthority[] getGrantedAuthorities(DirContextOperations user, String username) {
...
Set roles = getGroupMembershipRoles(userDn, username);
Set extraRoles = getAdditionalRoles(user, username);
...
}
このメソッドはgetGroupMembershipRoles
、を呼び出します。これは、このユーザーに対して定義されたグループのLDAP検索を実行し、それを。という名前のローカル変数に格納しますroles
。の実装ではgetAdditionalRoles
、LDAPでこのユーザーに定義されたグループにもアクセスする必要があるため、このユーザーの追加の役割を推測できます。ビジネス上の理由から、これらの追加の役割をLDAPで直接定義することはできません。
単純に先に進んでLdapAuthoritiesPopulator
自分で実装することもできますが、実際に必要なのはroles
、2回目のLDAP検索を行わなくても済むように、親クラスのメソッドのローカル変数にアクセスすることだけなので、他の方法があるのではないかと考えていました。