首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得<http>创建的ExceptionTranslationFilter的<http>

如何获得<http>创建的ExceptionTranslationFilter的<http>
EN

Stack Overflow用户
提问于 2012-08-29 07:43:05
回答 1查看 7K关注 0票数 4

各位:

我如何才能得到由in 3.0.x和3.1.x创建的authenticationEntryPoint).‘s BeanDefinition?我想重用它的PropertyValue of BeanDefinition ExceptionTranslationFilterBeanDefinition--我发现不能通过bean名称或类从DefaultListableBeanFactory获得它,似乎没有注册ExceptionTranslationFilter的BeanDefinition。

其他过滤器,如:org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0.,它有一个bean名UsernamePasswordAuthenticationFilter但是ExceptionTranslationFilter没有一个。

我发现的唯一方法是迭代搜索filterChainProxy的属性,还有更好的方法吗?

我在psuedo代码中所做的事情:

代码语言:javascript
运行
复制
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,什么是获得核心过滤器异常的最佳方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-29 10:22:58

因为 implementation or have access to it

每个<http>命名空间块总是创建一个SecurityContextPersistenceFilter、一个ExceptionTranslationFilter和一个FilterSecurityInterceptor。这些都是固定的,不能用其他办法取代。

您应该使用“传统的”bean FilterChainProxy (使用命名空间代理的名称"springSecurityFilterChain"),或者通过解释地定义它们并在<http>中引用它们来访问ExceptionTranslationFilter的属性。

代码语言:javascript
运行
复制
<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实现是根据配置了哪些身份验证机制来设置的,因此选择您需要的机制。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12173051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档