每个人:
如何在 3.0.x 和 3.1.x 中创建ExceptionTranslationFilter
's ?BeanDefinition
我想重用它PropertyValue
的BeanDefinition
(accessDeniedHandler和authenticationEntryPoint)。我发现我无法DefaultListableBeanFactory
通过bean名称或类获取它,似乎ExceptionTranslationFilter的BeanDefinition没有注册。
像其他过滤器一样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