我不确定filterChainProxy,我的spring安全性在我的应用程序中工作正常,但我需要从属性文件中加载ConfigAttributes ..
我知道我需要de创建类实现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>
我是否真的需要声明所有这些过滤器只使用一个自定义过滤器?
我想从属性文件中提取我的网址和相应的角色..
答案 0 :(得分:1)
来自文档部分"Adding in Your Own Filters"的引用:
请注意,您无法替换使用
<http>
元素本身创建的过滤器 -SecurityContextPersistenceFilter
,ExceptionTranslationFilter
或FilterSecurityInterceptor
。
如果您想自定义这三个过滤器中的一个,那么您必须自己定义整个链。
对你来说可能已经太晚了,但就像这个问题的后续行动一样:你可以应用以下不那么漂亮的黑客来定制命名空间配置创建的FilterSecurityInterceptor
,以避免手动创建整个过滤器链。
创建一个除了在其构造函数中收到的CustomSecurityMetadataSource
上设置FilterSecurityInterceptor
外无需执行任何操作的类。
public class FilterSecurityInterceptorInitializer {
@Autowired
public FilterSecurityInterceptorInitializer(
FilterSecurityInterceptor filterSecurityInterceptor,
CustomSecurityMetadataSource securityMetadataSource) {
filterSecurityInterceptor
.setSecurityMetadataSource(securityMetadataSource);
}
}
然后在您的上下文中包含此初始化程序类:
<bean class="FilterSecurityInterceptorInitializer" autowire="constructor"/>
<bean class="CustomSecurityMetadataSource"/>