ユーザーに基づいて、ユーザーを切り替える権限があるかどうかを確認する必要がありますuserId
。セキュリティ xml の<http>
要素内で、カスタム フィルターを指定しています。
<custom-filter after="FILTER_SECURITY_INTERCEPTOR" ref="switchUserProcessingFilter"/>
<beans:bean id="switchUserProcessingFilter" class="com.something.MySwitchUserFilter">
<beans:property name="userDetailsService" ref="userServices" />
<beans:property name="switchUserUrl" value="/admin/switchUser" />
<beans:property name="exitUserUrl" value="/exitUser" />
<beans:property name="successHandler" ref="userSwitchSuccessHandler"></beans:property>
</beans:bean>
ではMySwitchUserFilter
、1 つのメソッドのみをオーバーライドします。
@Override
@PreAuthorize("canISwitchToThisUser(#{request.getAttribute('userId')}")
protected Authentication attemptSwitchUser(HttpServletRequest request) throws AuthenticationException {
return super.attemptSwitchUser(request);
}
@PreAuthorize
は他の場所で働いていますが、なぜここで働いていないのだろうか。userId
慣例の ' ' とともにリクエスト パラメータ ' ' も渡していることに注意してくださいj_username
。注釈が処理されていないというだけで、ユーザーを切り替えることができることに注意してください。