Spring MVC 使用Interceptors 拦截器 小结

LoginHandlerInterceptor

新建一个类 实现HandlerInterceptor接口

public class LoginHandlerInterceptor implements HandlerInterceptor {

    @Override
    /**
     * preHandle: 顾名思义,该方法将在请求处理之前进行调用。SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。
     * 每个Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是Interceptor 中的preHandle方法,
     * 所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。
     * 该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor和Controller 都不会再执行;
     * 当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        System.out.println(">-- 进入 LoginHandlerInterceptor preHandle");
        String url = request.getRequestURI();
        System.out.println("您请求的URI:"+url);
        //登陆URI地址
        String login = "/admin/login";
        if (url.indexOf(login) > 0) {
            return true;
        } else {
            System.out.println("拦截器:你没有登陆!");
            return true;
        }
    }


    @Override
    /**
     * postHandle:在当前请求进行处理之后,也就是Controller方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用
     */
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println(">-- 进入 LoginHandlerInterceptor postHandle");
    }

    @Override
    /*
     *afterComletion: 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行.该方法在整个请求结束之后
     也就是DispatcherServlet渲染了对应视图之后执行,一般用于垃圾资源清理工作
     */
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println(">-- 进入 LoginHandlerInterceptor afterCompletion");
    }
}

Configuration

需要加入在SpringMVC拦截器的配置文件中

Result

执行一个请求之后控制台界面

>-- 进入 LoginHandlerInterceptor preHandle
您请求的URI:/admin/write-post
拦截器:你没有登陆!
>-- 进入 LoginHandlerInterceptor postHandle
>-- 进入 LoginHandlerInterceptor afterCompletion
Last modification:June 23rd, 2019 at 10:27 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment