精华内容
下载资源
问答
  • springmvc 拦截器

    2020-05-08 16:06:30
    springmvc 拦截器
  • SpringMvc 拦截器

    2018-04-16 14:54:46
    SpringMvc 拦截器 原理清楚,代码简单,值得学习!
  • SpringMVC拦截器

    2015-10-24 18:31:23
    SpringMVC拦截器的使用,通俗易懂!
  • springmvc拦截器

    2015-02-05 15:29:58
    这是一个springmvc拦截器 好多项目都会用到拦截器 在用户发送请求后会被会被拦截器拦截 根据需要做相应的处理 如编码
  • springMVC拦截器

    2017-12-31 09:52:32
    springmvc拦截器

    springmvc拦截器的定义和配置

    • Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理
    • springmvc拦截器的定义: 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法
      • preHandle方法:进入Handler方法之前执行。可以用于身份认证、身份授权。比如如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行(return false),否则就放行(return true)
      • postHandle方法:进入Handler方法之后,返回ModelAndView之前执行。可以看到该方法中有个modelAndView的形参。应用场景:从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图
      • afterCompletion方法:执行Handler完成之后执行。应用场景:统一异常处理,统一日志处理等。
    • springmvc拦截器的配置
      • 在springmvc中,拦截器是针对具体的HandlerMapping进行配置的,也就是说如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该拦截器
      • 假设我们在配置文件中配置了的映射器是org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
        <property name="interceptors">
        <list>
        <ref bean="handlerInterceptor1"/>
        <ref bean="handlerInterceptor2"/>
        </list>
        </property>
        </bean>
        <bean id="handlerInterceptor1" class="ssm.intercapter.HandlerInterceptor1"/>
        <bean id="handlerInterceptor2" class="ssm.intercapter.HandlerInterceptor2"/>
    • ==配置类似于全局的拦截器==,建议使用

      • springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中,这样就可以成为全局的拦截器了
        
          <!-- springmvc配置类似于全局的拦截器 -->
        <mvc:interceptors>
            <!-- 多个拦截器,按顺序执行 -->        
            <mvc:interceptor>
                <!-- 指定要拦截的url  -->
                <mvc:mapping path="/**"/> <!-- 表示拦截所有的url包括子url路径 -->
                <bean class="com.td.interceptor.HandlerInterceptor1"/>
            </mvc:interceptor>
           <mvc:interceptor>
                <mvc:mapping path="/**"/>
                <bean class="com.td.interceptor.HandlerInterceptor2"/>
            </mvc:interceptor>
            <mvc:interceptor>
                <mvc:mapping path="/**"/>
                <bean class="com.td.interceptor.HandlerInterceptor3"/>
            </mvc:interceptor>
        </mvc:interceptors>

    拦截器的执行顺序

    • 定义三个拦截器进行测试
      1. 三个拦截器都放行,将三个拦截器的方法的返回值都改为true,拦截器的执行顺序如下
        • 测试结果:这里写图片描述
        • 当多有的拦截器都放行的时候,preHanler方法是按照配置的顺序执行的,其他方法是按照配置的顺序逆向执行的
      2. 第三个拦截器不放行,其他拦截器放行
        • 测试结果:这里写图片描述
        • ==总结==:
        • 因为拦截器1和拦截器2放行,拦截器3的preHandler方法才可以执行,前面的拦截器放行后面的拦截器才会执行preHandler
        • 拦截器3不放行,拦截器3的另外两个方法不会被执行,也就是如果某个拦截器不放行,那么它的另外两个方法就不会执行
        • 只要有一个拦截器不放行,所有拦截器的postHandler方法都不会执行,但是只好执行过 preHandler并且放行的拦截器,就会执行afterCompletion方法
      3. 三个拦截器都不放行
        • 测试结果:这里写图片描述
        • 原因同上

    拦截器的使用

    • 根据拦截器执行顺序的第二中情况:比如现在要写一个统一异常处理的逻辑,那么要将该拦截器放在拦截器链的第一个位置,且一定要放行,因为只有放行了,才会去执行afterCompletion,而且放在拦截器链的第一个的话,afterCompletion方法会最后执行,才能在里面执行统一异常处理的逻辑。
    • 登陆认证拦截器,放在拦截器链接中第一个位置(如果有统一异常处理,那么应该放在统一异常处理的后面)。权限校验拦截器,放在登陆认证拦截器之后(因为登陆通过后才校验权限)。

    实例:登录认证拦截器

    • 思路:
      • 首先拦截到用户访问的url,判断如果这个url是公开的地址(不需要登录就可以访问的,那么就return true 放行)
      • 其次判断,Session中的用户信息,如果存在,直接放行
      • 最后,也就是没有用户的登录信息,转发到登录页面
    • 实现登录的Controller方法这里写图片描述
    • 拦截器这里写图片描述
    • 配置拦截器这里写图片描述
    • 登录代码:这里写图片描述
    展开全文
  • SpringMVC 拦截器

    2018-02-08 21:54:31
    一、springmvc 拦截器的实现 • 创建拦截器并实现HandleInterceptor接口,也可以实现WebRequestInterceptor接口,但是WebRequestInterceptor接口中preHandle方法没有返回值,所以不能通过此方法终止请求 • 在...

    一、springmvc 拦截器的实现

    • 创建拦截器并实现HandleInterceptor接口,也可以实现WebRequestInterceptor接口,但是WebRequestInterceptor接口中preHandle方法没有返回值,所以不能通过此方法终止请求
    • 在Spring MVC配置文件中以bean的形式注册拦截器,可以将bean配置在interceptors标签中,这时默认拦截所有路径,也可以在interceptors的子标签interceptor中配置bean,同时指定拦截规则mapping-path

    <mvc:interceptors>
           <mvc:interceptor>
                  <mvc:mapping path="拦截路径(可使用正则表达式)">
                  <bean class="拦截器类的全限定名(包名+类名)">
           </mvc:interceptor>
    </mvc:interceptors>

    二、拦截器方法的介绍

    HandleInterceptor 需要实现的三个方法:

    • preHandler
      • 返回值:是否需要将当前请求拦截下来(false:请求将被终止 ,true:请求会被继续运行)
        • 参数:HttpServletRequest, HttpServletResponse, Object Object(被拦截的请求目标对象)
    • postHandler
      • 参数:HttpServletRequest, HttpServletResponse, Object, ModelAndView ModelAndView:改变显示的视图或者修改发往视图的方法
    • afterCompletion
      • 作用:做资源的销毁,如关闭IO流

    三、多拦截器协同工作流程

    这里写图片描述

    四、拦截器和过滤器的区别

    ①、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
    ②、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
    ③、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
    ④、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
    ⑤、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
    ⑥、拦截器可以获取IOC容器中的各个bean,而过滤器不行,在拦截器里注入一个service,可以调用业务逻辑

    展开全文
  • SpringMVC 拦截器使用方法 SpringMVC拦截器执行顺序理解 一、拦截器作用 1、Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。 二、使用方法 1、依赖 ...

               SpringMVC 拦截器使用方法 SpringMVC拦截器执行顺序理解

     

    一、拦截器作用

    1、Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

     

    二、使用方法

    1、依赖 spring-webmvc

     <dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-webmvc</artifactId>
    	    <version>4.3.20.RELEASE</version>
         </dependency>

     

    2、创建一个LogInterceptor 类,实现 org.springframework.web.servlet.HandlerInterceptor 接口

     

    3、重写的 preHandle 、 postHandle 、 afterCompletion 作用如下

     /**
    	 * preHandle: Controller 执行之前,调用该方法
    	 * 返回 true,表示继续执行 ; 返回 false ,终止执行。
    	 * 应用: 登陆校验、权限拦截 等。
    	 */
    	@Override
    	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
    		System.out.println("LogInterceptor =====> preHandle ");
    		return true;
    	}
    	
    	/**
    	 * postHandle: Controller 执行之后,但未返回视图前,调用此方法。
    	 * 应用:对模型数据进行加工处理,加入公用信息以便页面显示 ; 或者手机、平板等移动端访问,返回对应页面数据。
    	 */
    	@Override
    	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView view)
    			throws Exception {
    		System.out.println("LogInterceptor =====> postHandle ");
    		if(null != view) {
    			System.out.println("viewName: "+view.getViewName());
    		}
    		
    	}
    	
    	/**
    	 * afterCompletion: Controller 执行之后,且返回视图后,调用此方法。
    	 * 应用:日志记录、异常记录、资源清理等。
    	 */
    	@Override
    	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
    			throws Exception {
    		System.out.println("LogInterceptor =====> afterCompletion ");
    	}

     

    4、spirng-mvc.xml 中配置拦截器

    <mvc:interceptors>
        <!-- LogInterceptor  -->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean id="logInterceptor" class="com.runcode.interceptor.LogInterceptor" />
        </mvc:interceptor>
      </mvc:interceptors>

     

    5、启动项目,请求任意一个url,可以看到控台输出:

    LogInterceptor =====> preHandle  //  执行Controller 之前
    hello  // 执行Controller
    LogInterceptor =====> postHandle // 执行Controller,返回视图之前 
    LogInterceptor =====> afterCompletion // 执行Controller,返回视图之后

     

    三、执行顺序理解

    1、分别创建 FirstInterceptor 和 SecondInterceptor  (源码这里

    public class FirstInterceptor implements HandlerInterceptor {
    	
    	@Override
    	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
    		System.out.println("FirstInterceptor  ---> preHandle" );
    		return true;
    	}
    	
    	@Override
    	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
    			throws Exception {
    		System.out.println("FirstInterceptor  ---> postHandle" );
    	}
    	
    	@Override
    	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
    			throws Exception {
    		System.out.println("FirstInterceptor  ---> afterCompletion" );
    	}
    }

     

    2、FirstInterceptor 和 SecondInterceptor 顺序 配置如下(先First,后Second):

    <mvc:interceptors>
    		<mvc:interceptor>
    			<mvc:mapping path="/userController/**"/>
    			<bean class="com.runcode.interceptor.FirstInterceptor" />
    		</mvc:interceptor>
    		<mvc:interceptor>
    			<mvc:mapping path="/userController/**"/>
    			<bean class="com.runcode.interceptor.SecondInterceptor" />
    		</mvc:interceptor>
    	</mvc:interceptors>

    3、FirstInterceptor 和 SecondInterceptor 的 preHandle 方法都返回 true

    4、控制台输出如下:

    FirstInterceptor  ---> preHandle
    SecondInterceptor  ---> preHandle
    SecondInterceptor  ---> postHandle
    FirstInterceptor  ---> postHandle
    SecondInterceptor  ---> afterCompletion
    FirstInterceptor  ---> afterCompletion

     

    5、SecondInterceptor 和 FirstInterceptor 倒序 配置如下(先Second,后First)

    <mvc:interceptors>
    		<mvc:interceptor>
    			<mvc:mapping path="/userController/**"/>
    			<bean class="com.runcode.interceptor.SecondInterceptor" />
    		</mvc:interceptor>
    		<mvc:interceptor>
    			<mvc:mapping path="/userController/**"/>
    			<bean class="com.runcode.interceptor.FirstInterceptor" />
    		</mvc:interceptor>
    	</mvc:interceptors>

    6、FirstInterceptor 和 SecondInterceptor 的 preHandle 方法都返回 true 。

    7、控制台输出如下:

    SecondInterceptor  ---> preHandle
    FirstInterceptor  ---> preHandle
    FirstInterceptor  ---> postHandle
    SecondInterceptor  ---> postHandle
    FirstInterceptor  ---> afterCompletion
    SecondInterceptor  ---> afterCompletion

    8、根据拦截器配置顺序,配置在前: preHandle 先执行; postHandle 和 afterCompletion,后执行。

     

    四、返回false时测试

    1、FirstInterceptor 和 SecondInterceptor 顺序配置,但FirstInterceptor 的 preHandle返回 false , SecondInterceptor 的preHandle返回 true 。 (先First,后Second , 配置 【三-2】)

    2、控制台输出如下:

    FirstInterceptor ---> preHandle

    3、结论: SecondInterceptor 和 Controller 都不执行。

    4、FirstInterceptor 和 SecondInterceptor 顺序配置,但FirstInterceptor的preHandle返回 true , SecondInterceptor 的preHandle返回 false 。(先First,后Second , 配置 【三-2】)

    FirstInterceptor  ---> preHandle
    SecondInterceptor  ---> preHandle
    FirstInterceptor  ---> afterCompletion

    5、结论:拦截器中只要有返回false,则 postHandle 方法不会执行 ; 单一拦截器中,preHandle 返回true, afterCompletion 才会执行。

     

    五、总结

    1、按照 springmvc.xml中配置的拦截器先后顺序,规律如下:

    • preHandle 按照顺序执行 (配置在前,先执行)

    • postHandle 按照倒序执行。 (配置在前,后执行)

    • afterCompletion 同 postHandle 。

     

    2、多个拦截器中,只要有返回false,则 postHandle 方法不会执行。(全部返回true,postHandle 方法才执行)

    3、多个拦截器中,只要有返回 false,则对应 Controller 也不会执行。

    4、单一拦截器中,preHandle 返回true,则 afterCompletion 才会执行。

    5、单一拦截器中,preHandle 返回 false,则 preHandle 和 afterCompletion 不会执行。

     

     

    源码下载: https://gitee.com/RunCoder/spring-mvc-tourist/tree/interceptor

     

    展开全文
  • SpringMvc拦截器

    2016-12-31 17:10:26
    Spring MVC可以使用拦截器对请求进行拦截处理,用户...springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。 class=

    Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。

    springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。

    <bean
    
         class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    
         <propertyname="interceptors">
    
             <list>
    
                  <refbean="handlerInterceptor1"/>
    
                  <refbean="handlerInterceptor2"/>
    
             </list>
    
         </property>
    
    </bean>
    
         <beanid="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/>
    
         <beanid="handlerInterceptor2"class="springmvc.intercapter.HandlerInterceptor2"/>
    
     


    配置方式二

    springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中。

    /*表示只是拦截最根部的那层请求

    <!--拦截器 -->
    
    <mvc:interceptors>
    
         <!--多个拦截器,顺序执行 -->
    
         <mvc:interceptor>
    
             <mvc:mappingpath="/**"/>
    
             <beanclass="cn.itcast.springmvc.filter.HandlerInterceptor1"></bean>
    
         </mvc:interceptor>
    
         <mvc:interceptor>
    
             <mvc:mappingpath="/**"/>
    
             <beanclass="cn.itcast.springmvc.filter.HandlerInterceptor2"></bean>
    
         </mvc:interceptor>
    
    </mvc:interceptors>


     

    展开全文
  • 配置图文,超详细!!SpringMVC拦截器Interceptor详解,多个拦截器的执行顺序,拦截器进行权限判断和日志记录,拦截器和过滤器的区别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,680
精华内容 25,072
关键字:

springmvc拦截器

spring 订阅