您的位置:首页 > 编程语言 > Java开发

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

2016-08-18 15:59 351 查看
前言:是个系统都会涉及到登录拦截,以前接触的是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的请求。

当然稍微大一点的项目最好的办法是做静态分离,从静态服务器请求静态文件,直接一了百了完全不怕冲突了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: