文档介绍:Spring Security3源码分析-FilterSecurityInterceptor
FilterSecurityInterceptor过滤器对应的类路径为
这个filter是filterchain中比较复杂,也是比较核心的过滤器,主要负责授权的工作
在看这个filter源码之前,先来看看spring是如何构造filter这个bean的
具体的构造过程的代码片段为Java代码
//这个方法源自HttpConfigurationBuilder类
void createFilterSecurityInterceptor(BeanReference authManager) {
//判断是否配置了use-expressions属性
boolean useExpressions = (httpElt);
//根据intercept-url标签列表创建授权需要的元数据信息。后面仔细分析
BeanDefinition securityMds = (interceptUrls, httpElt, pc);
RootBeanDefinition accessDecisionMgr;
//创建voter列表
ManagedList<BeanDefinition> voters = new ManagedList<BeanDefinition>(2);
//如果是使用了表达式,使用WebExpressionVoter
//没使用表达式,就使用RoleVoter、AuthenticatedVoter
if (useExpressions) {
(new RootBeanDefinition());
} else {
(new RootBeanDefinition());
(new RootBeanDefinition());
}
//定义授权的决策管理类AffirmativeBased
accessDecisionMgr = new RootBeanDefinition();
//添加依赖的voter列表
().addPropertyValue("decisionVoters", voters);
((httpElt));
// Set up the access manager reference for http
String accessManagerId = (ATT_ACCESS_MGR);
//如果未定义access-decision-manager-ref属性,就使用默认的
//AffirmativeBased
if (!(accessManagerId)) {
accessManagerId = ().generateBeanName(accessDecisionMgr);
(new BeanComponentDefinition(accessDecisionMgr, accessManagerId));
}
//创建FilterSecuri