FilterChainManager 接口代码如下:
public interface FilterChainManager {
// 得到注册的拦截器
Map<String, Filter> getFilters();
// 获取拦截器链
NamedFilterList getChain(String chainName);
// 是否有拦截器链
boolean hasChains();
// 得到所有拦截器链的名字
Set<String> getChainNames();
// 使用指定的拦截器链代理原始拦截器链
FilterChain proxy(FilterChain original, String chainName);
// 注册拦截器
void addFilter(String name, Filter filter);
// 注册拦截器
void addFilter(String name, Filter filter, boolean init);
// 根据拦截器链定义创建拦截器链
void createChain(String chainName, String chainDefinition);
// 添加拦截器到指定的拦截器链
void addToChain(String chainName, String filterName);
// 添加拦截器(带有配置的)到指定的拦截器链
void addToChain(String chainName, String filterName, String chainSpecificFilterConfig) throws ConfigurationException;
}
此接口主要三个功能:注册拦截器,注册拦截器链,对原始拦截器链生成代理之后的拦截器链。
针对下面配置,对该接口进行说明
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 注入安全管理器-->
<property name="securityManager" ref="securityManager"/>
<!-- 设置登录URL-->
<property name="loginUrl" value="/login"/>
<property name="filters">
<util:map>
<!-- 注册authc、sysUser、kickout-->
<entry key="authc" value-ref="formAuthenticationFilter"/>
<entry key="sysUser" value-ref="sysUserFilter"/>
<entry key="kickout" value-ref="kickoutSessionControlFilter"/>
</util:map>
</property>
<property name="filterChainDefinitions">
<!-- 此处配置除了登录等之外的地址都走 kickout 拦截器进行并发登录控制-->
<value>
/login = authc
/logout = logout
/authenticated = authc
/** = kickout,user,sysUser
</value>
</property>
</bean>
filters 属性定义了拦截器。
filterChainDefinitions 定义了拦截器链。
如 /** 就是拦截器链的名字,而 kickout,user,sysUser 就是拦截器名字列表。