慕课 springmvc拦截器

本文深入解析SpringMVC拦截器的工作原理、实现方法及其在权限验证、乱码处理等场景的应用,包括如何配置过滤器、编写自定义拦截器、以及在实际项目中的实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1章 概述 

拦截器,一般指的是在浏览器页面向服务端发出请求后,拦截请求,对请求进行一系列的操作;或者在服务器返回数据时,在数据到达浏览器界面前,做一些操作。
拦截器一般用于权限验证、乱码处理等操作


第2章 Spring MVC拦截器的实现

2-1 过滤器工作原理 (07:36)

1)web.xml
  <filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>*</url-pattern>
  </filter-mapping>

2-2 拦截器的实现 (08:25)


2-3 拦截器方法介绍 (08:45)

1)编写拦截器类实现HandlerInterceptor接口
public class TestInterceor implements HandlerInterceptor {
    //返回值:表示我们是否需要将当前的请求拦截下来
    //      true:请求将会被继续执行
    //      false:请求将被终止
    //参数o表示的是拦截器的请求的目标对象
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("preHandle");
        return true;
    }


    //可以通过参数modelAndView参数来改变显示的视图,或修改发往视图的方法
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        modelAndView.addObject("msg","这里传回的是被拦截器修改之后的消息!");
        modelAndView.setViewName("hello2");
    }


    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {


    }
}
 

2)将拦截器注册进SpringMVC框架中
    <mvc:interceptors>
        <bean class="com.imooc.test.interceptor.TestInterceor" />
    </mvc:interceptors>
   

3)配置拦截器的拦截规则
        <mvc:interceptor>
            <mvc:mapping path="/viewform"/>
            <bean class="com.imooc.test.interceptor.TestInterceor" />
        </mvc:interceptor>


2-4 多个拦截器应用 (04:32)


输出:
preHandle
执行到了  preHandle  2
进入了控制器的viewall()方法...
name =
pwd =
执行到了  postHandle  2
执行到了  postHandle   
执行到了  afterCompletion  2
执行到了  afterCompletio


2-5 拦截器的其他实现方式 (02:27)

编写拦截器类实现WebRequestInterceptor接口,注册方法不变
弊端:preHandler没有返回值


第3章 拦截器的使用场景

1) 乱码问题 
2)权限验证问题
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("preHandle");
        //乱码
        httpServletRequest.setCharacterEncoding("utf-8");
        //权限验证
        if(httpServletResponse==null){
            httpServletRequest.getRequestDispatcher(httpServletRequest.getContextPath()+"/index.jsp").forward(httpServletRequest,httpServletResponse);


            System.out.println(httpServletRequest.getSession().getAttribute("name"));
            return false;
        }
        return true;
    }
 
 

第4章 拦截器与过滤器的对比及课程总结 

拦截器和过滤器的区别。
过滤器基于servlet,拦截范围更大;
拦截器依赖于框架,基于反射,只过滤请求。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值