Spring-MVC 登录拦截与静态资源冲突的问题

来源:互联网 发布:小号托管平台源码 编辑:程序博客网 时间:2024/06/06 03:11

前言:是个系统都会涉及到登录拦截,以前接触的是struts2,现在流行restful并且spring MVC给人更加随心所欲和自由的感觉,springMVC本身的实现比struts2更加直观更加符合组件的概念,这个不在本文中深入讨论。

上代码:

<span style="white-space:pre"></span><mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/login/**"/><bean class="com.me.joker.interceptor.LoginInterceptor"/></mvc:interceptor></mvc:interceptors>

老一点的文章里,都只有

<mvc:mapping>

这个标签的使用;其实随着spring的发展,要排除某个url的拦截怎么会不考虑实现,所以就有了:

<mvc:exclude-mapping/>

如果你像我上面这样配拦截的url,并且你的spring拦截器拦截的是"/",那么恭喜你,你会发现你的loginPage上的css和js也一并被拦截了

哪怕你已经在xml中加了类似如下的配置:

<!--对于静态资源不拦截--><mvc:resources mapping="/js/**" location="/static/js/"/><mvc:resources mapping="/css/**" location="/static/css/"/><mvc:resources mapping="/img/**" location="/static/img/"/><mvc:resources mapping="/bootstrap/**" location="/static/bootstrap/" cache-period="86400"/>
比较无脑的解决办法就是把拦截器的配置改成如下:

<mvc:interceptors>   <mvc:interceptor>      <mvc:mapping path="/**"/>      <mvc:exclude-mapping path="/login/**"/>      <mvc:exclude-mapping path="/js/**"/>      <mvc:exclude-mapping path="/css/**"/>      <mvc:exclude-mapping path="/bootstrap/**"/>      <bean class="com.xxx.interceptor.LoginInterceptor"/>   </mvc:interceptor></mvc:interceptors>

其实如果稍微有经验一点,最好的做法是,尽量不要把需要登录的url放在/路径下,比如所有登录后的url放在/main路径下

那么你的拦截器只需要配置

<mvc:interceptors>   <mvc:interceptor>      <mvc:mapping path="/main/**"/>      <bean class="com.me.joker.interceptor.LoginInterceptor"/>   </mvc:interceptor></mvc:interceptors>
类似这种拦截方式即可避免拦截所有路径的请求,直接避免了拦截js和css的请求。

当然稍微大一点的项目最好的办法是做静态分离,从静态服务器请求静态文件,直接一了百了完全不怕冲突了。

0 0
原创粉丝点击