SpringMVC中拦截器的使用

首先,编写一个类然后实现HandlerInterceptor接口,并重写其中的三个方法,分别是 preHandlepostHandleafterCompletion
这里我就用用户登录拦截作为例子,代码如下

package com.lzp.interceptor;

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

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

/**
 * @Author LZP
 * @Date 2021/2/13 16:28
 * @Version 1.0
 *
 * 登录拦截
 * 使用拦截器三步骤:
 *  一、新建一个类,让此类实现HandlerInterceptor接口
 *  二、重写HandlerInterceptor接口中的三个方法(除preHandle方法外,另外两个方法可重写可不重写,
 *      因为他俩没有返回值,可以用来打印日志)
 *  三、在SpringMVC配置文件中配置拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("===========执行前=========");

        String requestURI = request.getRequestURI();
        System.out.println(requestURI);

        Object obj = request.getSession().getAttribute("userName");

        // 如果是请求的登录页,则放行
        if (requestURI.contains("goLogin")) {
            if (obj != null) {
                // 去主页
                request.getRequestDispatcher("/WEB-INF/jsp/main.jsp").forward(request, response);
                return false;
            }
            return true;
        }

        // 在登录页发送登录请求,也放行
        if (requestURI.contains("login")) {
            if (obj != null) {
                // 去主页
                request.getRequestDispatcher("/WEB-INF/jsp/main.jsp").forward(request, response);
                return false;
            }
            return true;
        }

        // 如果session中的userName属性不为null,则放行,表示已经登录过
        if (request.getSession().getAttribute("userName") != null) {
            return true;
        }

        // 去登录页
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("===========提交处理=========");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("===========执行后=========");
    }
}

其次,我们还要在SpringMVC配置文件中配置拦截器,代码如下:

<!-- 配置拦截器 -->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/user/**"/>
        <bean class="com.lzp.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>
posted @ 2021-02-13 18:01  没有你哪有我  阅读(97)  评论(0编辑  收藏  举报