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

1 篇文章 0 订阅
1 篇文章 0 订阅

前言:是个系统都会涉及到登录拦截,以前接触的是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值