各位:
我如何才能得到由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
复制相似问题