SpringMVC的拦截器(十四)上

简介: SpringMVC的拦截器(十四)

一. 拦截器


常见的拦截器有登录拦截器,日志拦截器,权限拦截器,异常拦截器,性能拦截器等。


可以与 Struts2的拦截器进行联合性学习。 可以参考老蝴蝶以前写的文章:

Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)



SpringMVC实现拦截器,需要实现 org.springframework.web.servlet.HandlerInterceptor 接口。


package org.springframework.web.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract interface HandlerInterceptor
{
  public abstract boolean preHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Object paramObject)
    throws Exception;
  public abstract void postHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Object paramObject, ModelAndView paramModelAndView)
    throws Exception;
  public abstract void afterCompletion(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Object paramObject, Exception paramException)
    throws Exception;
}


HandlerInterceptor 接口中,有三个方法, preHandler,postHandle,afterCompletion.


1 .preHandler(request,response,obj) 该方法在控制器的处理请求方法之前执行,返回值是boolean, 为true时表示向下执行,为false 时表示中断执行。 通常在这个方法中进行验证拦截。


2 .postHandler(request,response,obj,modelAndView) 该方法在控制器的处理请求方法之后,在解析视图之前执行,可以对请求域 request中的模型和视图进行更一步的修改。


3 .afterCompletion(request,response,obj,exception) 该方法在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以通过此方法实现一些资源清理、记录日志信息等工作。


关于springmvc的配置均采用以前的形式, web.xml 中有字符乱码过滤器, DispatcherServlet 过滤器的url-pattern 设置的是 /, 即采用REST 风格。 springmvc.xml 去掉了 fastjson的配置,保留最开始的。  利用


二. 简单拦截器的配置及执行顺序


二.一 创建登录的拦截器 LoginInterceptor1.java


package com.yjl.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor1 implements HandlerInterceptor{
  @Override
  public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3){
    System.out.println("控制器方法执行之后,视图解析器之后执行1");
  }
  @Override
  public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
      throws Exception {
    System.out.println("控制器方法执行之后,视图解析器之前执行1");
  }
  @Override
  public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
    System.out.println("会在控制器方法之前执行1");
    return true;
  }
}


二.二 后端代码 UserAction


//转到登录的页面
  @RequestMapping(value="toLogin")
  public String toLogin(Model model){
    model.addAttribute("user",new User());
    System.out.println("执行toLogin方法");
    return "user/login";
  }
  @RequestMapping(value="login")
  public String login(User user,HttpSession session){
    System.out.println("执行Login方法");
    if("两个蝴蝶飞".equals(user.getName())&&"1234".equals(user.getPassword()))
    {
      session.setAttribute("userLogin", user);
      return "user/list";
    }else{
      return "user/login";
    }
  }


二.三 前端代码 login.jsp 设置


<body>
  <h2>两个蝴蝶飞,拦截器使用</h2>
  <form:form action="login" commandName="user" type="post">
    <form:label path="name">用户名:</form:label>
    <form:input path="name"/><br/>
    <form:label path="password">密码:</form:label>
    <form:input path="password"/><br/>
    <form:button>提交</form:button>
  </form:form>
</body>


二.四 springmvc.xml 配置拦截器


    <mvc:annotation-driven></mvc:annotation-driven>
    <!-- 配置拦截器 -->
<mvc:interceptors>
      <mvc:interceptor>
      <!--mvc:mapping 表示拦截的路径, /** 表示全部的路径  -->
        <mvc:mapping path="/**"/>
        <bean class="com.yjl.interceptor.LoginInterceptor1"></bean>
      </mvc:interceptor>
    </mvc:interceptors>


二.五 重启服务器,进行验证


当输入网址 : http://localhost:8027/SpringMVC09/user/toLogin   进行访问时

控制台打印输出:


20190902104846303.png


在前端输入数据, 用户名和密码 均输入正确的, 即输入 两个蝴蝶飞和 1234,点击提交:


20190909164723493.png


控制台打印输出:


20190909164731458.png


拦截器配置成功。


可知,拦截器的执行顺序是 preHandler–>UserAction中的方法,如 login----->postHandle—> afterCompletion 。


这只是一个拦截器,当多个拦截器,如三个时,又是如何执行的呢?




相关文章
|
8月前
|
Java Spring 容器
【二十二】springboot整合拦截器实战并对比过滤器
【二十二】springboot整合拦截器实战并对比过滤器
86 0
|
8月前
|
存储 调度
SpringMVC 拦截器开发详解
SpringMVC 拦截器开发详解
|
XML 数据格式
SpringMVC中拦截器使用实践详解
SpringMVC中拦截器使用实践详解
125 0
|
Java 数据安全/隐私保护
57SpringMVC - 拦截器案例
57SpringMVC - 拦截器案例
38 0
|
存储 前端开发 Java
二.SpringMVC源码剖析-SpringMVC执行流程
上一篇文章写得是SpringMVC组件初始化,这篇文章我们来探讨一下SpringMVC的执行流程
|
前端开发 Java Spring
SpringMVC拦截器实现原理
SpringMVC拦截器实现原理
179 0
SpringMVC拦截器实现原理
|
Java 容器 Spring
SpringMVC学习(十一):注解配置SpringMVC
使用配置类和注解代替web.xml和SpringMVC配置文件的功能
146 0
|
前端开发 Java Spring
SpringMVC拦截器(配置版)
SpringMVC拦截器(配置版)
|
前端开发
SpringMVC拦截器的基本使用
1.拦截器(interceptor)的作用 (1)SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。 (2)将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体体现。
157 0
SpringMVC 如何使用注解完成登录拦截
SpringMVC 如何使用注解完成登录拦截
SpringMVC 如何使用注解完成登录拦截