在Spring MVC中,拦截器是通过实现HandlerInterceptor接口来定义的。该接口包含了三个方法:
-
preHandle:在请求到达处理器之前执行,可以进行一些预处理操作。如果返回false,则请求将被拦截,不再继续执行后续的拦截器和处理器。
-
postHandle:在处理器执行之后、视图渲染之前执行,可以进行一些后处理操作。可以修改ModelAndView对象,添加额外的模型数据或修改视图。
-
afterCompletion:在视图渲染之后执行,用于进行一些资源清理操作,例如释放资源或记录日志。
下面来看一下常见的应用场景
1.认证和授权:拦截器可以用于验证用户的身份和权限,确保只有经过认证和授权的用户才能访问受保护的资源。
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 检查用户是否已经登录,如果未登录则重定向到登录页面
if (!isLoggedIn(request)) {
response.sendRedirect("/login");
return false;
}
// 检查用户是否有访问权限,如果没有则返回403 Forbidden错误
if (!hasAccess(reque