spring 18-Spring框架拦截器简介

  • 拦截器是在用户和具体操作的Action之间做一个屏障
  • 保证提交到Action上的数据是真实有效的数据

实现拦截器的操作处理接口:org.springframework.web.servlet.HandlerInterceptor

  • public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception:在某一个控制器的方法执行之前调用
  • public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception:正在执行某一个控制器中的方法
  • public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception:控制器的方法执行完毕之后进行调用

拦截器中使用了一个程序类:org.springframework.web.method.HandlerMethod

  • public Object getBean():返回触发此拦截器的程序类(*Action)
  • public Method getMethod():取得具体操作Action中的方法的Method对象
  • public Class<?> getBeanType():取得触发此拦截器程序类的Class对象
  • public MethodParameter[] getMethodParameters():取得所有提交到此方法上的参数

所有用户请求时提交的参数,在拦截器中使用org.springframework.core.MethodParameter程序类进行接收:

  • public Method getMethod():取得调用的方法对象
  • public Class<?> getParameterType():取得提交到此Action上的参数名称
  • public String getParameterName():取得此参数的类型

Spring拦截器的简单应用

1、定义一个拦截器

package cn.liang.util.validate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class ValidationInterveptor implements HandlerInterceptor {
  Logger log = Logger.getLogger(ValidationInterveptor.class);

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
          throws Exception {
      log.info("**** preHandle:" + handler.getClass());
      return true;
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
          ModelAndView modelAndView) throws Exception {
      log.info("**** postHandle:" + handler.getClass());
      log.info("**** postHandle-ModelAndView:" + modelAndView);
  }

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
          throws Exception {
      log.info("**** afterCompletion:" + handler.getClass());
  }
}

2、配置applicationContext-mvc.xml文件

<mvc:interceptors>        <!-- 定义拦截器栈,可以定义有多个拦截器 -->
  <mvc:interceptor>   <!-- 定义某一个具体的拦截器 -->
      <mvc:mapping path="/pages/**/*.action"/>    <!-- 该拦截器针对于所有路径下的action -->
      <!-- 定义该拦截器使用的拦截器处理程序类,必须是HandlerInterceptor子类 -->
      <bean class="cn.liang.util.validate.ValidationInterceptor"/>
  </mvc:interceptor>
</mvc:interceptors>

3、编写一个Action

package cn.liang.action;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/pages/emp/*")
public class EmpAction{
  private Logger log = Logger.getLogger(EmpAction2.class) ;

  @RequestMapping("remove")
  public ModelAndView remove(@RequestParam(value="empno",defaultValue="10") int eid){
      System.out.println("输出的eid结果:"+ eid * 2);
      return null;
  }
}

4、启动程序,输出结果

2018-12-12 16:28:03,987 INFO [cn.liang.util.validate.ValidationInterveptor] - **** preHandle:class org.springframework.web.method.HandlerMethod
输出的eid结果:20
2018-12-12 16:28:03,988 INFO [cn.liang.util.validate.ValidationInterveptor] - **** postHandle:class org.springframework.web.method.HandlerMethod
2018-12-12 16:28:03,988 INFO [cn.liang.util.validate.ValidationInterveptor] - **** postHandle-ModelAndView:null
2018-12-12 16:28:03,988 INFO [cn.liang.util.validate.ValidationInterveptor] - **** afterCompletion:class org.springframework.web.method.HandlerMethod

原文地址:https://www.cnblogs.com/liangjingfu/p/10113894.html

时间: 2024-10-11 04:15:55

spring 18-Spring框架拦截器简介的相关文章

spring 拦截器简介

spring 拦截器简介 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等.2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面:3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录):4.通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提

【Spring】7、拦截器HandlerInterceptor

处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结

Spring AOP原理及拦截器

原理 AOP(Aspect Oriented Programming),也就是面向方面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns,例如,所有大中型应用都要涉及到的持久化管理(Persistent).事务管理(Transaction Management).安全管理(Security).日志管理(L

spring mvc 方法注解拦截器

应用场景,在方法级别对本次调用进行鉴权,如api接口中有个用户唯一标示accessToken,对于有accessToken的每次请求可以在方法加一个拦截器,获得本次请求的用户,存放到request或者session域. python中,之前在python flask中可以使用装饰器来对方法进行预处理,进行权限处理 先看一个实例,使用@access_required拦截: @api.route('/post_apply') @access_required def apply():     "&q

spring mvc中的拦截器小结 .

在spring mvc中,拦截器其实比较简单了,下面简单小结并demo下. preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Controller实现):      返回值:true表示继续流程(如调用下一个拦截器或处理器):              false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应: postHandle:后处理回调方法,实现处理器的后处理(但在渲

spring mvc 能过拦截器记录请求数据和响应数据

spring mvc 能过拦截器记录请求数据记录有很多种方式,主要有以下三种: 1:过滤器 2:HandlerInterceptor拦截器 3:Aspect接口控制器 但是就我个人所知要记录返回的数据,只能通过Aspect处理,以下是实现此需要的代码 package com.qmtt.config; import java.util.Arrays; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annot

Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用

一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的 而在Spring中,基于Filter这种方式可以实现Bean预处理.后处理. 比如注入FilterRegistrationBean,然后在这个Bean上传递自己继承Filter实现的自定义Filter进入即可. 而Spring MVC也有拦截器,不仅可实现Filter的所有功能,还可以更精确的控制拦截精度. Spring MVC提供的org.springframework.web.servlet.handler.HandlerInt

spring boot中注册拦截器

拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式.在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作. 如何在spring boot中添加拦截器? 1.首先自己实现一个拦截器 import org.springframework.web.ser

Spring MVC中的拦截器Interceptor

谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主要分两种,一个是HandlerInterceptor,一个是MethodInterceptor. 一,HandlerInterceptor拦截器 HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行.实现一个Ha