问题描述:
今天给浏览器页面加上logo文件 /favicon.ico,类似上图。
文件放在 static/common/images 路径下,页面 head 里加上
<link rel="shortcut icon" href="static/common/images/favicon.ico" type="image/x-icon">浏览器可以成功显示 favicon.ico,但是在第一次登陆成功后会自动重定向到 /favicon.ico 文件的路径。
基本大多数浏览器都会请求 favicon.ico 这个图标文件用来展示在浏览器的URL地址前面,而这个文件被shiro保护了。
解决方法:
在 filterChainDefinitions 下配置 /favicon.ico 以匿名访问
/favicon.ico = anon可是我配置好 /static/common/images/favicon.ico = anon 后,还是会重定向。
多次测试之后发现anon配置的顺序会有影响。
Shiro验证URL时,URL匹配成功便不再继续匹配查找,所以要注意配置文件中的URL顺序,尤其在使用通配符时。
故filterChainDefinitions的配置顺序为自上而下,以最上面的为准。
<property name="filterChainDefinitions">
<value>
/resources/**=anon
/systemManage/resources/**=anon
/unauthorized = authc
/login = authc
/logout = logout
<!--/authenticated = authc-->
/** = user,sysUser
/static/common/images/favicon.ico = anon
</value>
</property>
修改后的配置:
<property name="filterChainDefinitions">
<value>
/static/common/images/favicon.ico = anon
/resources/**=anon
/systemManage/resources/**=anon
/unauthorized = authc
/login = authc
/logout = logout
<!--/authenticated = authc-->
/** = user,sysUser
</value>
</property>
只是调整了 /static/common/images/favicon.ico = anon 的顺序。
过滤器 anon 表示可匿名使用,可以理解为匿名用户或游客,无需认证便可以访问的的文件。
还是不太理解顺序跟重定向的关系,但是我确实依靠调整顺序解决了这个问题。有知情的大神,还请不吝指教!