首页 专题 文章 代码 归档
SpringMVC拦截器
2020.02.03 16:04 2020.02.03 16:04

1. 拦截器

作用:抽取C中的冗余功能

类似:类似其他框架、语言中的中间件作用。

1.1. 定义拦截器

执行顺序:preHandle-postHandle--afterCompletion

package com.misiai.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {

    /**
     * 一般用前置拦截
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        // 登录状态的判断
        if (request.getSession().getAttribute("user") == null) {
            return true;//放行
        }
        response.sendRedirect("/user/login"); // 中断的处理,一般是跳转到某个页面,如登录页面
        return false;// 中断请求,也即Handler不再执行(Handler指:controller中的方法)
    }

    /**
     * 在Handler之后执行
     * */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");

    }

    /**
     * 页面渲染完成之后,资源回收之类之用
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");

    }
}

解释:

1、该类实现HandlerInterceptor,然后有3个方法。一般只需要在前方法处理逻辑即可。

1.2. 注册

applicationContext.xml

<!--自定义拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--path:即要拦截的路径,不是该路径的不拦截-->
        <mvc:mapping path="/inter/**"/>
        <!--/** 两星才代表多个路径,如果只有一个*,就只拦截一级路径-->
        <bean class="com.misiai.interceptor.MyInterceptor"/>
    </mvc:interceptor>

</mvc:interceptors>

结果:

截图-1580714594

本节阅读完毕!
二维码图片 扫描关注我们哟