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中加了类似如下的配置:
比较无脑的解决办法就是把拦截器的配置改成如下:
其实如果稍微有经验一点,最好的做法是,尽量不要把需要登录的url放在/路径下,比如所有登录后的url放在/main路径下
那么你的拦截器只需要配置
类似这种拦截方式即可避免拦截所有路径的请求,直接避免了拦截js和css的请求。
当然稍微大一点的项目最好的办法是做静态分离,从静态服务器请求静态文件,直接一了百了完全不怕冲突了。
上代码:
<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的请求。
当然稍微大一点的项目最好的办法是做静态分离,从静态服务器请求静态文件,直接一了百了完全不怕冲突了。
相关文章推荐
- spring MVC js css图片等静态资源无法加载问题
- SpringBoot+SpringSecurity误拦截静态资源问题调研
- spring+springmvc+myabtis+bootstrap 填补天坑(1)-静态资源加载问题
- J2EE for SpringMVC 映射静态资源独Js不成功的问题解决
- spring-mvc不拦截静态资源的配置
- spring-mvc不拦截静态资源的配置
- Spring boot + Spring Security CSS静态资源拦截问题
- Spring-mvc 静态资源不拦截
- spring+springmvc+mybatis 中 对静态资源的拦截
- spring-mvc不拦截静态资源的配置
- Spring3 MVC 深入研究--访问静态资源
- Spring3 MVC 拦截器拦截不到的问题
- Spring-mvc静态资源无法加载
- spring mvc静态资源拦截问题
- spring-mvc加载静态资源文件
- ASP.NET MVC 静态资源打包和压缩问题小记
- 单点登录CAS使用记(五):cas-client不拦截静态资源以及无需登录的请求。
- springMVC js等文件找不到错误,也就是访问不了静态资源
- Spring中拦截/和拦截/*的区别 - 不能访问到返回的JSP - 访问静态资源(jpg,js等)
- SpringMVC+MyBatis - 7 Spring自动扫描注解类的冲突问题