Spring中的拦截器的笔记要点记录

Springmvc中的拦截器

目录

Springmvc中的拦截器... 1

一、       什么是SpringMVC拦截器... 1

二、       Springmvc中的拦截器... 1

三、       SpringMVC拦截器应用场景... 6

拦截器是一个运行在服务端的程序,主要用于拦截用户的请求并进行相应的处理,即实现对控制器Controller请求的预处理或后处理。通过拦截器可以使得程序在某个动作(action)执行前或执行后,能够先执行或后执行特定的代码逻辑,也可以实现在某个动作(action)执行前阻止某些代码逻辑的执行。

在Spring MVC框架中,拦截器(Interceptor)是一种用于拦截请求和响应处理器。它可以在请求处理前或处理后执行一些自定义逻辑,比如身份验证、日志记录、权限校验等。在Spring MVC中,可以使用注解来定义和配置拦截器。

  1. 作用

类似于javaweb中的Filter,用来对请求进行拦截,可以将多个Controller中执行的共同代码的放入拦截器中执行,减少Controller类中代码的冗余。

  1. 特点
  1. 拦截器只能拦截Controller的请求,不能拦截jsp
  2. 拦截器可中断用户的请求轨迹
  3. 请求先经过拦截器,之后还会经过拦截器
  1. SpringMVC拦截器和Servlet开发中的过滤器的区别

为什么要说它们两个的区别呢,因为它们两个的功能是一样的,非常的相似,面试的时候也经常会问道。

  • 案例实现步骤

实现步骤:

1. 新建web项目,导入springmvc jar包依赖并配置

2. 创建Interceptor拦截器类

3. 配置SpringMVC核心配置文件,注册拦截器

4. 创建Controller类

5. 创建index.jsp页面

6. 打开浏览器,进行测试

案例步骤详解:

  1. 新建web项目,导入springmvcjar包依赖并配置

我们用依赖坐标,在pom.xml中导入相关依赖。

  1. 创建Interceptor拦截器类:拦截器1

/**
 *
以实现接口的方式定义拦截器
 
*/
public class MyInterceptor implements HandlerInterceptor {

   
@Override
   
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       
System.out.println("指定拦截器:MyInterceptor1...preHandle");
       
return true; // 返回true表示继续处理请求,返回false表示中断请求处理
   
}

   
@Override
   
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
       
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
       
System.out.println("指定拦截器:MyInterceptor1...postHandle");
    }

   
@Override
   
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
       
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
       
System.out.println("指定拦截器:MyInterceptor1...afterCompletion");
    }
}

  1. 创建Interceptor拦截器类:拦截器2

/**
 *
实现了HandlerInterceptor接口的自定义拦截器类
 
*/
public class UserInterceptor implements HandlerInterceptor {
   
@Override
   
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       
System.out.println("全局拦截器:UserInterceptor...preHandle");
       
//对拦截的请求进行放行处理
       
return true;// 返回true表示继续处理请求,返回false表示中断请求处理
   
}

   
@Override
   
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
       
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
       
System.out.println("全局拦截器:UserInterceptor...postHandle");
    }

   
@Override
   
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
       
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
       
System.out.println("全局拦截器:UserInterceptor...afterCompletion");
    }
}

  1. 配置SpringMVC核心配置文件,注册拦截器,让其生效!

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      
xmlns:mvc="http://www.springframework.org/schema/mvc"
      
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:context="http://www.springframework.org/schema/context"   xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd"
>
   
<!-- 定义组件扫描器,指定需要扫描的包 -->
   
<context:component-scan base-package="com.zkj.controller" />
   
<!--配置拦截器(只能拦截请求,不能拦截具体页面)-->
   
<mvc:interceptors>
       
<!--使用bean直接定义全局拦截器,将拦截所有请求-->
       
<bean class="com.zkj.Interceptor.UserInterceptor"/>
       
<!-- 拦截器1 -->
       
<mvc:interceptor>
           
<!--配置拦截器作用的路径。拦截什么样的路径:
             /*:表示拦截所有的一级路径
             /**:拦截任意多级路径    /user/get/list/query
         -->
            <!--
定义在<mvc:interceptor>下面的表示匹配指定路径的请求才进行拦截的 -->
           
<mvc:mapping path="/**" />
           
<!-- 配置不需要拦截器作用的路径 -->
           
<mvc:exclude-mapping path="/hello1" />
            <
bean class="com.zkj.Interceptor.MyInterceptor" />
        </
mvc:interceptor>
    </
mvc:interceptors>
</
beans>

如图所示:

  1. 创建Interceptor拦截器类

  1. 创建index.jsp页面

    局部拦截器注册:自己指定拦截的路径

<body>
   <
a href="${pageContext.request.contextPath}/hello">
      
拦截请求测试(被UserInterceptorMyInterceptor拦截)
  
</a>
   <
a href="${pageContext.request.contextPath}/hello1">
      
请求放行(被全局拦截器UserInterceptor拦截,指定拦截MyInterceptor放行)
  
</a>
</
body>

  1. 测试

案例: SpringMVC拦截器模拟用户登录校验(ch7-2)

(ch7-2)

实现步骤:

1. 新建web项目,导入springmvcjar包依赖并配置web.xml

2. 创建User类

3. 创建index.jsp页面,homejsp和login.jsp页面

4. 创建UserController类

5. 创建Interceptor拦截器类

6. 配置SpringMVC核心配置文件,注册拦截器

7. 打开浏览器,进行测试

案例步骤详解:

  1. 新建web项目,导入springmvcjar包依赖并配置

我们用依赖坐标,在pom.xml中导入相关依赖。

  1. 创建User类

public class User {
   
private Integer id;//id
   
private String username;//用户名
   
private String password;//密码

}

  1. 创建index.jsp页面,home.jsp和login.jsp页面

index.jsp页面:

注意:login.jsphome.jsp放在/WEB-INF/jsp/下面

login.jsp页面:

${msg}
<form action="${pageContext.request.contextPath}/login" method="post">
     
用户名:<input  type="text" name="username"/><br/>
     
密码:<input  type="password" name="password"/><br/>
            <
input  type="submit" value="登录"/>
</
form>

home.jsp页面:

  1. 创建UserController类,com.zkj.controller包下创建类。

  1. 创建Interceptor拦截器类,在com.zkj.Interceptor包下创建类。

  1. 配置SpringMVC核心配置文件,注册拦截器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      
xmlns:mvc="http://www.springframework.org/schema/mvc"
      
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      
xmlns:context="http://www.springframework.org/schema/context"
      
xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd"
>

   
<!-- 定义组件扫描器,指定需要扫描的包 -->
   
<context:component-scan base-package="com.zkj.controller" />

   
<!-- 定义视图解析器 -->
   
<bean id="viewResolver" class=
            "org.springframework.web.servlet.view.InternalResourceViewResolver"
>
        <
property name="prefix" value="/WEB-INF/jsp/" />
        <
property name="suffix" value=".jsp" />
    </
bean>

   
<!--配置拦截器(只能拦截请求,不能拦截具体页面)-->
   
<mvc:interceptors>
        <
mvc:interceptor>
            <
mvc:mapping path="/**" />
           
<!-- 配置不需要拦截器作用的路径 -->
           
<mvc:exclude-mapping path="/loginview" />
            <
mvc:exclude-mapping path="/login" />
            <
bean class="com.zkj.interceptor.LoginInterceptor" />
        </
mvc:interceptor>
    </
mvc:interceptors>

</
beans>

  1. 打开浏览器,进行测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值