前言:是个系统都会涉及到登录拦截,以前接触的是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的请求。
当然稍微大一点的项目最好的办法是做静态分离,从静态服务器请求静态文件,直接一了百了完全不怕冲突了。