1

我不确定filterChainProxy,我的应用程序中的spring security工作正常,但我需要从属性文件加载ConfigAttributes ..

我知道我需要创建实现FilterInvocationSecurityMetadataSource的类..然后我做到了..在那之后

当我阅读这个时..我在文档中看到我必须在应用程序上下文 xml 上声明 filterchaeinProxy .. 像这样..

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
  <constructor-arg>
    <list>
       <sec:filter-chain pattern="/**" filters="
           securityContextPersistenceFilterWithASCTrue,
           formLoginFilter,
           exceptionTranslationFilter,
           filterSecurityInterceptor" />
    </list>
  </constructor-arg>
</bean>

我真的需要声明所有这些过滤器以仅使用一个自定义过滤器吗?

我只想从属性文件中提取我的网址和相应的角色..

4

1 回答 1

1

引用文档部分“添加您自己的过滤器”

请注意,您不能替换使用<http>元素本身创建的过滤器SecurityContextPersistenceFilter-ExceptionTranslationFilterFilterSecurityInterceptor.

这就是为什么如果您想自定义这三个过滤器之一,您必须自己定义整个链。


可能对您来说为时已晚,但就像对这个问题的后续行动一样:您可以应用以下不太漂亮的技巧来自定义FilterSecurityInterceptor命名空间配置创建的内容,以避免必须手动创建整个过滤器链。

CustomSecurityMetadataSource创建一个除了设置它在FilterSecurityInterceptor其构造函数中接收的对象之外什么都不做的类。

public class FilterSecurityInterceptorInitializer {
    @Autowired
    public FilterSecurityInterceptorInitializer(
            FilterSecurityInterceptor filterSecurityInterceptor,
            CustomSecurityMetadataSource securityMetadataSource) {
        filterSecurityInterceptor
            .setSecurityMetadataSource(securityMetadataSource);
    }
}

然后在你的上下文中包含这个初始化类:

<bean class="FilterSecurityInterceptorInitializer" autowire="constructor"/>
<bean class="CustomSecurityMetadataSource"/>
于 2013-02-27T15:23:52.217 回答