贴上web.xml中的配置信息:
再贴上spring-shiro.xml的配置信息:
在这里可以发现,web.xml中的filter-name和spring-shiro.xml中的Bean的id值是等值关系。这样子,他们就关联起来了。不信??咱们看一下源码。
不管3*7=21,既然该过滤器类能在web.xml中可以配置,那么必然实现了javax.servlet.Filter接口,那么就先定位到org.springframework.web.filter.DelegatingFilterProxy的doFilter()方法,如下图:
再定位到该类的initDelegate()方法,如下图:
看到这里,也许你会有疑问。根据"shiroFilter"这个名字,调用getBean()方法的时候,获得的应该是:
org.apache.shiro.spring.web.ShiroFilterFactoryBean这个实例。但是如上图却是SpringShiroFilter实例。不要急嘛,年轻人!!继续由我慢慢给你道来,给你看一张图,如下:
当getBean()方法调用的时候,最终会层层调用到org.apache.shiro.spring.web.ShiroFilterFactoryBean的getObject()方法,这个方法就是连接spring与shiro的桥梁。
就这样子,spring与shiro就真正的关联起来了,这时候就是shiro就可以大显身手了。