spring mvc拦截器
时间: 2023-07-12 09:44:59 浏览: 119
Spring MVC的拦截器是一种应用于请求和响应过程中的过滤器,可以用于对请求进行预处理、对响应进行后处理,以及在请求到达处理程序之前或处理程序返回响应之后执行某些操作。
在Spring MVC中,拦截器是通过实现HandlerInterceptor接口来实现的。该接口定义了三个方法,分别是preHandle()、postHandle()和afterCompletion()。
- preHandle()方法在请求到达处理程序之前执行,可以用于进行身份验证、权限校验等操作,如果该方法返回false,则请求将被拦截并不会到达处理程序。
- postHandle()方法在处理程序完成请求处理后但尚未返回响应时执行,可以用于修改响应或添加一些额外的信息。
- afterCompletion()方法在请求处理完成后执行,无论成功或失败都会执行,可以用于进行资源清理等操作。
要使用拦截器,需要在Spring配置文件中进行配置,并将其注册到DispatcherServlet中。
下面是一个简单的拦截器示例,用于记录请求处理时间:
```java
public class TimeInterceptor implements HandlerInterceptor {
private static final Logger LOGGER = LoggerFactory.getLogger(TimeInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
request.setAttribute("startTime", System.currentTimeMillis());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
long startTime = (long) request.getAttribute("startTime");
long endTime = System.currentTimeMillis();
LOGGER.info("Request URL: {} , Time: {}ms", request.getRequestURL(), endTime - startTime);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// do nothing
}
}
```
在Spring配置文件中进行配置:
```xml
<mvc:interceptors>
<bean class="com.example.TimeInterceptor" />
</mvc:interceptors>
```
这样,每次请求处理完成后,日志中就会打印该请求的处理时间,以便进行性能优化。
阅读全文