过滤器是servlet规范中的一部分,任何java web 工程都可以使用。
拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。
过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。
拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css, image或者js是不会进行拦截的。
拦截器
需要配置多个拦截器可以在mvc:interceptors下再加 mvc:interceptor即可
!--配置拦截器-->
<mvc:interceptors>
<!--配置拦截器-->
<mvc:interceptor>
<!--你要拦截的具体方法-->
<mvc:mapping path="/inter/*/"/>
<!--不要拦截的方法-->
<!-- <mvc:exclude-mapping path=""/>-->
<!--配置拦截器对象-->
<bean class="com.fy.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
需要实现HandlerInterceptor方法
package com.fy.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器
*/
public class MyInterceptor implements HandlerInterceptor {
/**
* 预处理,controller方法执行前
* return true:放行,执行下一个拦截器,如果没有,执行controller中的方法
* return false:不放行 跳转到其他页面
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("MyInterceptor执行了....预处理");
return false;
}
/**
* 后处理的方法,controller方法执行后,success.jsp执行之前
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor执行了....后处理");
}
/**
* success.jsp页面执行后,该方法再执行
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param e
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("MyInterceptor执行了....最后处理");
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>拦截器</h3>
<a href="inter/testInterceptor">testInterceptor</a>
</body>
</html>