问题:在使用了MVC拦截器时,访问除登录页面以外的URL时,判断是否登录,未登录的访问全部跳转至登录界面,但是在设置好时,是会判断并跳转,但是在起初,未登录访问,会先进入访问的资源页面后,立即闪退去登录页面。
但是明显这种状况是不满足权限拦截需求的,是错误操作。
原因就在于一开始在web.xml中配置了 default默认servlet 然后对 *.html 资源的放行(因为不配无法访问到html资源。)
在web.xml文件中经常看到这样的配置default,这个配置的作用是:对客户端请求的静态资源如图片、JS文件等的请求交由 默认的servlet进行处理,如下所示:
default
*.jpg
default
*.png
default
*.gif
default
*.ico
default
*.gif
default
*.js
default
*.css
如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题。
如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg,*.html等静态文件的访问也就被拦截了。
即使你之后在mvc的拦截器中进行了部分资源的放行也依旧无法访问静态资源,因为你访问静态资源时DispatcherServlet会将你的请求先拦截,放行后返回浏览器的依旧是/***.html,会再次访问,然后又进DispatcherServlet,如此循环。
所以,default默认servlet的配置还是必须的。
于是问题就产生了,下面是我开始的配置(web.xml中):
default
*.html
但是,这样虽然表面上的功能都实现了,却会出现开始阐述的问题,没登录还是能有一瞬间看到被拦截的资源。
解决方式很简单,在web.xml删除上面的配置,将 该默认servlet配置 移到mvc的配置文件中配置,如下:
重新运行,问题解决,不会再进入被拦截页面后又闪跳会登录界面了。