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 就是攔截器名字列表。