pursue wind pursue wind
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
  • mybatis

  • mybatis-plus

  • Spring

    • spring
    • Spring--Http源码
    • Spring-5-0中文版-3-9
    • Spring-Bean的作用域管理
    • Spring-Bean的生命周期
    • Spring-事务管理
    • Spring-实战---IoC容器的依赖注入
    • SpringBean
    • SpringMVC 工作原理详解
    • SpringMVC-Restful
    • SpringMVC-的处理拦截器
    • SpringMVC之@CookieValue注解
    • SpringMVC之Controller查找(Spring4-0-3-Spring5-0-4源码进化对比)
    • SpringMVC全局异常
    • SpringMVC数据绑定
    • SpringMVC的@ResponseBody注解说明
    • Spring学习与面试
    • Spring源码解析-IoC容器的初始化过程(上)
  • SpringBoot

  • SpringSecurity

  • SpringCloud

  • 单元测试框架Mockito
  • 框架
  • Spring
pursuewind
2020-11-23

SpringMVC-的处理拦截器

#0 目录

# 1 Spring MVC拦截器流程图

#2 Spring Web MVC 的处理器拦截器

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

HandlerInterceptor接口定义了三个方法 ##2.1 preHandle 该方法将在请求处理之前进行调用,只有当该方法返回true时,才会继续调用下一个Interceptor的preHandle(),如果已是最后一个Interceptor就会是调用当前请求的Controller ##2.2 postHandle 该方法将在请求处理后,DispatcherServlet进行视图返回渲染之前进行调用,可以在这个方法中对Controller处理之后的ModelAndView对象进行操作(比如这里加入公用信息以便页面显示) ##2.3 afterCompletion 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为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"/> 
1
2
3
4
5
6
7
8
9
10
11

##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>  
1
2
3
4
5
6
7
8
9
10
11
12

#4 实践 用户访问其他页面时,从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;  
    }  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Last Updated: 2023/02/14, 18:02:00
SpringMVC-Restful
SpringMVC之@CookieValue注解

← SpringMVC-Restful SpringMVC之@CookieValue注解→

Theme by Vdoing | Copyright © 2019-2023 pursue-wind | 粤ICP备2022093130号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜
  • 网络DJ