各位:
我如何才能得到由in 3.0.x和3.1.x创建的authenticationEntryPoint).‘s BeanDefinition
?我想重用它的PropertyValue
of BeanDefinition
ExceptionTranslationFilter
和BeanDefinition
--我发现不能通过bean名称或类从DefaultListableBeanFactory
获得它,似乎没有注册ExceptionTranslationFilter的BeanDefinition。
其他过滤器,如:org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0.,它有一个bean名UsernamePasswordAuthenticationFilter
但是ExceptionTranslationFilter
没有一个。
我发现的唯一方法是迭代搜索filterChainProxy的属性,还有更好的方法吗?
我在psuedo代码中所做的事情:
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());
因此,真正的问题是BeanDefinition
,什么是获得核心过滤器异常的最佳方法?
发布于 2012-08-29 10:22:58
因为 implementation or have access to it
每个
<http>
命名空间块总是创建一个SecurityContextPersistenceFilter
、一个ExceptionTranslationFilter
和一个FilterSecurityInterceptor
。这些都是固定的,不能用其他办法取代。
您应该使用“传统的”bean FilterChainProxy
(使用命名空间代理的名称"springSecurityFilterChain"),或者通过解释地定义它们并在<http>
中引用它们来访问ExceptionTranslationFilter
的属性。
<http entry-point-ref="authenticationEntryPoint">
<access-denied-handler ref="accessDeniedHandler" />
<!-- other options -->
</http>
<bean:bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<bean:property name="loginFormUrl" value="/login.htm"/>
</bean:bean>
<bean:bean id="accessDeniedHandler"
class="org.springframework.security.web.access.AccessDeniedHandlerImpl">
<bean:property name="errorPage" value="/accessDenied.htm" />
</bean:bean>
根据文档,AuthenticationEntryPoint
实现是根据配置了哪些身份验证机制来设置的,因此选择您需要的机制。
https://stackoverflow.com/questions/12173051
复制相似问题