什么是拦截器:Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。在SpringMVC中通过实现HandlerInterceptor接口实现自定义拦截器类。
<html> <body> <h2>Hello World!</h2> </body> </html>
继承HandlerInterceptor
public class Myinterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("/****************拦截器当中preHandle的执行方法****************/"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("在HandlerAdapter之后执行,在DispatcherServlet解析视图之前执行"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("===========呈现之后调用==========="); } }
详情如上重写方法实现拦截
<!--配置拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/my/**"/> <bean class="com.SpringMVC.interceptor.Myinterceptor"/> </mvc:interceptor> </mvc:interceptors>
@Controller @RequestMapping("/my") public class MyController { @RequestMapping("/first") public String fileer(){ System.out.println("/***********控制器的方法***********/"); return "index"; } }
效果如下所示:
跳转到首页
如将preHandle return 改为false则是拦截,否则放行
1.程序先执行preHandle()方法,如果该方法的返回值为true,则程序会继续向下执行处理器中的方法,否则将不再向下执行。
2.在业务处理器(即控制器Controller类)处理完请求后,会执行postHandle()方法,进行视图渲染之前被调用,然后会通过DispatcherServlet向客户端返回响应。
3.在DispatcherServlet处理完请求后,才会执行afterCompletion()方法,作用域释放资源,抛出异常等等。
原文:https://www.cnblogs.com/ws1149939228/p/11842821.html