springmvc拦截器能够对请求的资源路径进行拦截,极大的简化了拦截器的书写。但是,千万千万要注意一点:静态资源的放行。
关于静态资源的放行,主要有三种方式:
1、修改请求的url地址。
如果请求的url地址都是以*.do结尾,那么拦截器中的配置可以变为拦截以do结尾的资源,静态资源自然就不会被拦截到了;
2、在自定义拦截器中对资源进行判断,如果满足需要排除的资源,就进行放行。
<!-- 拦截器配置 -->
<mvc:interceptors>
<!-- session超时 -->
<mvc:interceptor>
<mvc:mapping path="/*/*"/>
<bean class="com.myTree.interceptor.LoginInterceptor">
<property name="allowUrls">
<list>
<!-- 如果请求中包含以下路径,则不进行拦截 -->
<value>/login</value>
<value>/js</value>
<value>/css</value>
<value>/image</value>
<value>/images</value>
</list>
</property>
</bean>
</mvc:interceptor>
这种方式我试了下,启动时报没有alowUrl属性。这个可能需要另外定义还是怎么弄?有待考证
3.在拦截器中设定不拦截的属性:
//创建session
HttpSession session =request.getSession();
//无需登录,允许访问的地址
String[] allowUrls =new String[]{"/welcome","/userlogin","/js","/css","/images","/image"};
//获取请求地址
String url =request.getRequestURL().toString();
//获得session中的用户
String userName = (String)session.getAttribute("USER_NAME");
for (String strUrl : allowUrls) {
if(url.contains(strUrl))
{
return true;
}
}
if(StringUtils.isEmpty(userName))
{
throw new UnLoginException("您尚未登录!");
}
试过了,是可以的。
3.设置web.xml中的默认拦截器,不拦截静态资源
在springmvc的Dispatcher中配置<mvc:default-servlet-handler />(一般Web应用服务器默认的Servlet名称是"default",所以这里我们激活Tomcat的defaultServlet来处理静态文件,在web.xml里配置如下代码即可:)
<!--该servlet为tomcat,jetty等容器提供,将静态资源映射从/改为/static/目录,如原来访问http://localhost/foo.css,现在http://localhost/static/foo.css -->
<!-- 不拦截静态文件 -->
<
servlet-mapping
>
<
servlet-name
>default</
servlet-name
>
<
url-pattern
>/js/*</
url-pattern
>
<
url-pattern
>/css/*</
url-pattern
>
<
url-pattern
>/images/*</
url-pattern
>
<
url-pattern
>/fonts/*</
url-pattern
>
</
servlet-mapping
>