/**
* 用户模拟登录
*
* @author Chill
*/
@Component
public class UserHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) {
String servletPath = request.getServletPath();
if (servletPath.endsWith(CSS) || servletPath.endsWith(JS) || servletPath.endsWith(JPG) || servletPath.endsWith(PNG)) {
return true;
}
if (servletPath.startsWith(APP)) {
User user = new UserEntityImpl();
user.setId("admin");
SecurityUtils.assumeUser(user);
}
return true;
}
@Override
public void postHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
1.preHandle
调用时间:Controller方法调用前;
执行顺序:链式Intercepter情况下,拦截器按照声明顺序执行,如果return false中断执行,不会进入afterCompletion;
2.postHandle
调用前提:preHandle执行返回true;
调用时间:Controller方法执行完成之后,DispatcherServlet进行视图渲染之前,也就是说你可以在此时对ModelAndView进行操作;
执行顺序:链式Intercepter情况下,拦截器按照声明顺序倒序执行;
post、get请求都可处理
3.afterCompletion
调用前提:preHandle执行返回true;
调用时间:DispatcherServlet进行视图的渲染之后;多用于清理资源。