SpringMVC 的处理拦截器0 目录1 Spring MVC拦截器流程图2 Spring Web MVC 的处理器拦截器3 拦截器配置4 拦截器Handler

0 目录

1 Spring MVC拦截器流程图

2 Spring Web MVC 的处理器拦截器

类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理

HandlerInterceptor接口主要定义了三个方法:

2.1 boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handle)

该方法将在请求处理之前进行调用,只有当该方法返回true时,才会继续调用下一个InterceptorpreHandle(),如果已是最后一个Interceptor就会是调用当前请求的Controller

2.2 void postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView)

该方法将在请求处理之后,DispatcherServlet进行视图返回渲染之前进行调用,可以在这个方法中对Controller处理之后的ModelAndView对象进行操作(比如这里加入公用信息以便页面显示)

2.3 void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex)

该方法也是需要当前对应的InterceptorpreHandle方法的返回值为true时才会执行,该方法将在整个请求结束之后,也就是在DispatcherServlet ** 渲染了对应的视图之后执行** 用于资源清理

3 拦截器配置

3.1 针对某种mapping拦截器配置

 <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="springmvc.intercapter.HandlerInterceptor1"/>  
<bean id="handlerInterceptor2"class="springmvc.intercapter.HandlerInterceptor2"/> 

3.2 针对所有mapping配置全局拦截器

<!--拦截器 -->  
<mvc:interceptors>  
   <!--多个拦截器,顺序执行 -->  
   <mvc:interceptor>  
      <mvc:mapping path="/**"/>  
      <bean class="com.sss.filter.HandlerInterceptor1"></bean>  
   </mvc:interceptor>  
   <mvc:interceptor>  
      <mvc:mapping path="/**"/>  
      <bean class="com.sss.filter.HandlerInterceptor2"></bean>  
   </mvc:interceptor>  
</mvc:interceptors>  

4 拦截器Handler

用户访问其他页面时,从Seesion中获取到用户,未登录则重定向到登录页面。

Public class LoginInterceptor implements HandlerInterceptor{   
    @Override  
    Public boolean preHandle(HttpServletRequest request,  
            HttpServletResponse response, Object handler) throws Exception {  
  
        //如果是登录页面则放行  
        if(request.getRequestURI().indexOf("login.action")>=0){  
            return true;  
        }  
        HttpSession session = request.getSession();  
        //如果用户已登录也放行  
        if(session.getAttribute("user")!=null){  
            return true;  
        }  
        //用户没有登录挑战到登录页面  
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);  
          
        return false;  
    }  

3.用户登录Controller

//登陆提交  
    //userid:用户账号,pwd:密码  
    @RequestMapping("/login")  
    public String loginsubmit(HttpSession session,String userid,String pwd)throws Exception{  
          
        //向session记录用户身份信息  
        session.setAttribute("activeUser", userid);  
          
        return "redirect:item/queryItem.action";  
    }  
      
    //退出  
    @RequestMapping("/logout")  
    public String logout(HttpSession session)throws Exception{  
          
        //session过期  
        session.invalidate();  
          
        return "redirect:item/queryItem.action";  
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏进击的程序猿

doctrine 缘来 之 初次使用

本系列是读php data persistence with doctrine2 orm的笔记,本文是第二篇:doctrine的使用

10420
来自专栏分布式系统进阶

Influxdb启动流程分析

我们启动的话通常是 influxd run -config [config file path]

18710
来自专栏Java学习之路

Hibernate学习---基本介绍+作用+配置

从今天开始重新学习(以前学的太匆忙)Hibernate,这篇文章主要就一下几点进行讲解和说明: Hibernate的基本介绍 Hibernate的作用 Hibe...

29970
来自专栏青青天空树

springboot+security整合1

  Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文...

45830
来自专栏IT笔记

微信公众号H5支付遇到的那些坑

简史 官方文档说的很清楚,商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程。 当然,最近微信支付平台也加入了...

3.3K120
来自专栏李家的小酒馆

Spring MVC面试整理

Spring MVC执行过程 1. 客户端的请求提交到dispatcherServlet 2. DispatcherServ...

31000
来自专栏陈树义

玩转 SSH(七):使用 dubbo + zookeeper 实现服务模块化

一、创建 SSMVCAnnoDemo 项目 点击菜单,选择“File -> New Project” 创建新项目。选择使用 archetype 中的 maven...

48640
来自专栏代码拾遗

Spring Boot 2.0 教程 - 配置详解

Spring Boot 可以通过properties文件,YAML文件,环境变量和命令行参数进行配置。属性值可以通过,@Value注解,Environment...

13230
来自专栏猿人谷

Windows c++应用程序通用日志组件(组件及测试程序下载)

引言   众所周知,在调试、跟踪和执行应用程序的过程中,程序的日志能为这些工作提供大量有价值的运行信息。因此,程序的日志对应用程序的运行、维护至关重要。   在...

23750
来自专栏LuckQI

SpringBoot~SpringBatch 使用

Spring Batch 提供了大量可重用的组件,包括了日志、追踪、事务、任务作业统计、任务重启、跳过、重复、资源管理。对于大数据量和高性能的批处理任务,Spr...

15530

扫码关注云+社区

领取腾讯云代金券