みんな:
3.0.x および 3.1.x で作成されたExceptionTranslationFilter
を取得するにはどうすればよいですか? その( accessDeniedHandlerとauthenticationEntryPoint )をBeanDefinition
再利用したい。Bean 名またはクラスから取得できないことがわかりました。ExceptionTranslationFilter の BeanDefinition が登録されていないようです。PropertyValue
BeanDefinition
DefaultListableBeanFactory
のような他のフィルターUsernamePasswordAuthenticationFilter
には、Bean 名があります: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0。しかしExceptionTranslationFilter
、持っていません。
私が見つけた唯一の方法は、filterChainProxy のプロパティを繰り返し検索することです。より良い方法はありますか?
私が擬似コードで行うこと:
BeanDefinitionBuilder builder =
BeanDefinitionBuilder.rootBeanDefinition(MyExceptionFilter.class);
RootBeanDefinition exceptionTranslationFilter = getExceptionTranslationFilterBeanDefinition();
PropertyValue accessDeniedHandler = exceptionTranslationFilter.getPropertyValues().getPropertyValue("accessDeniedHandler");
Object handler = (RootBeanDefinition) accessDeniedHandler.getValue();
builder.addPropertyValue("accessDeniedHandler", handler);
beanDefinitionRegistry.registerBeanDefinition("myFilter", builder.getBeanDefinition());
したがって、本当の問題は、コア フィルターの ExceptionTranslation の accesDeniedHandler を取得する最善の方法は何かということです。BeanDefinition