springmvc过滤器和拦截器
时间: 2023-07-12 07:13:00 浏览: 142
Spring MVC 中的过滤器和拦截器都可以在请求处理之前或之后进行一些特定的操作,但它们的实现方式和作用范围不同。
过滤器是基于 Servlet 规范实现的,在 Servlet 容器中运行,可以拦截所有的请求(包括静态资源请求),并对请求进行处理。过滤器通常用于请求的预处理和后处理,比如编码转换、日志记录、权限校验、资源缓存等。
拦截器是基于 Spring MVC 框架实现的,在 DispatcherServlet 中运行,只能拦截 Spring MVC 的请求(即只能拦截到经过 DispatcherServlet 的请求),并对请求进行处理。拦截器通常用于请求的预处理和后处理,比如权限校验、日志记录、性能监控等。
下面是一个简单的 Spring MVC 过滤器和拦截器的示例:
```java
// 过滤器实现类
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化方法
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 处理请求的方法
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
}
@Override
public void destroy() {
// 销毁方法
}
}
// 拦截器实现类
public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 处理请求前的方法
System.out.println("请求 URL:" + request.getRequestURI());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 处理请求后的方法
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 请求处理完成后的方法
}
}
```
在 Spring MVC 中配置过滤器和拦截器:
```xml
<!-- 配置过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.example.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置拦截器 -->
<mvc:interceptors>
<bean class="com.example.LogInterceptor" />
</mvc:interceptors>
```
阅读全文