1.subject.isAuthenticated(),本质上会根据是否读取到session判断是否登录,对分布式系统的改造,可以通过sessionDao去缓存中读取。可以从
DefaultWebSecurityManager->DefaultWebSubjectFactory.createSubject->DefaultSubjectContext.resolveAuthenticated一步步跟下去。
2.默认情况下,如使用 ShiroFilterFactoryBean 创建 shiroFilter 时,默认使用PathMatchingFilterChainResolver 进行解析,而它默认是根据当前请求的 URL 获取相应的拦截器链,使用 Ant 模式进行 URL 匹配,默认使用 DefaultFilterChainManager 进行拦截器链的管理。如果多个拦截器链都匹配了当前请求 URL,那么只返回第一个找到的拦截器链。
3.用@Bean创建自定义filter,会被自动加入到servlet的filter链中,造成肯定会被执行,可以通过FilterRegistrationBean的setEnabled方法设为false解决