shiro源码分析,查了些资料,针对于在shiro框架中设置filterChainDefinitions遇到的小问题,做一下分析备忘记录。
问题描述:
在设置filterChainDefinitions的时候,如果/k/**设置在/k/index之前,那么/k/index将不会生效,有规则说:
拦截器的优先级是从上到下,从左到右,如果有匹配的拦截器就会阻断并返回。
设置:
1、ShiroFilterFactoryBean.setFilterChainDefinitions方法,获取基本参数,转化为Section键值对,'='左边为键,右边为值,存到filterChainDefinitionMap中,此时用的是LinkedHashMap,有序的,所以过滤器的生效有着先后顺序
2、调用ShiroFilterFactoryBean.getObject方法(ShiroFilterFactoryBean是实现了FactoryBean<T>接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,所以spring在获取ShiroFilterFactoryBean时,返回的是ShiroFilterFactoryBean的getObject()方法)
3、方法createInstance中ÿ
1、ShiroFilterFactoryBean.setFilterChainDefinitions方法,获取基本参数,转化为Section键值对,'='左边为键,右边为值,存到filterChainDefinitionMap中,此时用的是LinkedHashMap,有序的,所以过滤器的生效有着先后顺序
2、调用ShiroFilterFactoryBean.getObject方法(ShiroFilterFactoryBean是实现了FactoryBean<T>接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,所以spring在获取ShiroFilterFactoryBean时,返回的是ShiroFilterFactoryBean的getObject()方法)
3、方法createInstance中ÿ