favicon.ico引起的spring security登录后跳转错误

在使用spring security登录的时候,用户在某些情况下登录成功的时候莫名被重定向到favicon.ico。

之前一直没发现这个问题是因为在项目中存在favicon.ico文件,这个请求被nginx处理了而未转发给tomcat。

这次因为偷懒还没来得及配置nginx,结果就出现了上面的问题。

出现上述问题的原因是:基本大多数浏览器都会请求favicon.ico这个图标文件用来展示在浏览器的URL地址前面,而这个文件被spring security保护了,所以…有下面的流程:

  • the user requests URL “/“. This URL is cached.
  • the browser makes a requests to “/favicon.ico”. This URL becomes the new URL where to redirect to upon authentication.
  • the user posts the login form and is redirected to “/favicon.ico”

而解决办法是将favicon.ico加入允许匿名访问.

<sec:intercept-url pattern=”/favicon.ico” access=”IS_AUTHENTICATED_ANONYMOUSLY” />

其实这并不是一个好方案,为何要将favicon.ico请求的处理交给你的Servlet容器呢?仅仅一个图标而已,我们应该用nginx或apache直接处理:

location /favicon.ico {
#root ‘/data/web/static/‘;
return 404;
}