SpringMVC中HandlerInterceptor拦截器及接口中三个方法介绍

一、前言:

当用到强制登陆操作时,要用到拦截器,下面介绍一下 HandlerInterceptor接口中三个方法

二、实现方法过程:

在这里插入图片描述
创建类实现HandlerInterceptor接口之后,jdk1.8之前如果没有实现三个preHandle、postHandle、afterHadnle方法会报错,由于jdk1.8的新特性,这里不会报错,需要手动实现三个方法,
idea快捷键:Alt+Inset,点击Implements Methods
在这里插入图片描述
选中三个方法,点击ok,即可手动实现三个方法;
在这里插入图片描述

三、三个方法介绍

public boolean preHandle

调用时间: Controller方法处理之前【也就是路径跳转之前】;

执行顺序: 链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行;

返回值: 返回值为true,则继续执行,false中断执行,生成时默认false;

应用场景: 常用于强制登陆等操作

public void postHandle

调用前提: preHandle返回true;

调用时间: Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作

执行顺序: 链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。

备注: postHandle虽然post打头,但post、get方法都能处理

public void afterCompletion

调用前提:preHandle返回true

调用时间:DispatcherServlet进行视图的渲染之后

应用场景:多用于清理资源,统一日志处理,统一异常处理

代码如下:


//拦截器
public class MyHandlerInterceptor implements HandlerInterceptor {
    
    

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        
            return  false;
        }
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
    

    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    

    }
}

粘上强制登陆的代码,仅供参考:

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        HttpSession session = request.getSession();
        Object flag = session.getAttribute("flag");//获取登陆时存放入session作用域中的标识flag
        if(flag!=null){
    
      //flag不为空,说明登陆成功
            return  true;
        }else {
    
      //flag为空,说明登陆失败,跳转到登陆页面
            response.sendRedirect(request.getContextPath()+"/login.jsp");
            return  false;
        }
    }

四、拦截器的配置:

使用HandlerInterceptor拦截器需要在springMVC-servlet.xml中配置如下:

    <!--强制登陆拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/> <!-- xml文件里 '/**'表示拦截所有请求路径 -->
            <!--不拦截如下路径:-->
            <!-- 不拦截1-登陆-->
            <mvc:exclude-mapping path="/manager/selectByName.do"/>
            <!--不拦截2-注册-->
            <mvc:exclude-mapping path="/manager/insert.do"/>
            <!--不拦截3-验证码Controller-->
            <mvc:exclude-mapping path="/manager/validateCode.do"/>
            <bean class="com.xxx.util.MyHandlerInterceptor"/>  <!--根据自己的MyHandlerInterceptor类位置修改 -->
        </mvc:interceptor>
    </mvc:interceptors>

在pom.xml文件里导入依赖:

    <!--hutool 用于生成验证码-->
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.4.1</version>
    </dependency>

准备工作就绪,接着就可以愉快使用拦截器了~

猜你喜欢

转载自blog.csdn.net/qq_43521500/article/details/120812499