SpringMVC 拦截器

SpringMVC 拦截器

SpringMVC 框架中的拦截器用于对处理器进行预处理和后处理的技术。

SpringMVC 拦截器

可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。

拦截器和过滤器的功能比较类似,有区别

1.  过滤器是 Servlet 规范的一部分,任何框架都可以使用过滤器技术。 
2.  拦截器是 SpringMVC 框架独有的,因此只对控制器方法产生作用。 
3.  过滤器配置了 /*,可以拦截任何资源,因此静态资源需要在配置中排除。

springmvc.xml 配置静态资源过滤

<!-- location  表示路径,mapping  表示文件,** 表示该目录下的文件以及子目录的文件  -->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/scripts/" mapping="/javascript/**"/>

拦截器只会对控制器中的方法进行拦截。

拦截器也是 AOP 思想的一种实现方式

想要自定义拦截器,需要实现 HandlerInterceptor 接口,然后根据需要重写里面方法。

简而言之拦截器就是对控制层执行前后进行处理的工具,之前学过的 @ModelAttribute 注解也可以对 Controller 参数进行预处理,只是 @ModelAttribute 只是将处理好参数返给控制器了。拦截器明显可以做更多事,例如看请求中是否包含某信息,不包含则跳转到错误页面,包含则正常执行控制层。

自定义拦截器步骤

创建类,实现 HandlerInterceptor 接口,idea 按 ctrl+ o 重写需要方法,返回 true 放行,反之拦截。可以做登录前的验证,未登录预处理重定向或转发跳转到登录页面。

public class MyInterceptor1 implements HandlerInterceptor {
    /**
     * controller 方法执行前,进行拦截的方法
     * return true 放行
     * return false 拦截
     *  可以使用转发或者重定向直接跳转到指定的页面。
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler)
            throws Exception {        System.out.println(" 拦截器执行了...");
        return true;
    }
}

配置 springmvc.xml,以下配置了两拦截器,执行顺序,12->Controller->21->JSP->21

<!--  配置拦截器  -->
<mvc:interceptors>
    <mvc:interceptor>
        <!--  哪些方法进行拦截  -->
        <mvc:mapping path="/user/*"/>
        <!--  哪些方法不进行拦截
        <mvc:exclude-mapping path=""/>
        -->
        <!--  注册拦截器对象  -->
        <bean class="cn.cheng.demo1.MyInterceptor1"/>
    </mvc:interceptor>
    
        <mvc:interceptor>
        <!--  哪些方法进行拦截  -->
        <mvc:mapping path="/**"/>
        <!--  哪些方法不进行拦截
        <mvc:exclude-mapping path=""/>
        -->
        <!--  注册拦截器对象  -->
        <bean class="cn.cheng.demo1.MyInterceptor2"/>
    </mvc:interceptor>
</mvc:interceptors>
  1. preHandle 方法是 controller 方法执行前拦截的方法

    1. 可以使用 request 或者 response 跳转到指定的页面

    2. return true 放行,执行下一个拦截器,如果没有拦截器,执行 controller 中的方法。

    3. return false 不放行,不会执行 controller 中的方法。

  2. postHandle 是 controller 方法执行后执行的方法,在 JSP 视图执行前。

    1. 可以使用 request 或者 response 跳转到指定的页面

    2. 如果指定了跳转的页面,那么 controller 方法跳转的页面将不会显示。

  3. afterHandle 方法是在 JSP 执行后执行

    1. request 或者 response 不能再跳转页面了

目录
  • SpringMVC 拦截器
    • 自定义拦截器步骤
  • 目录
  • SpringMVC 拦截器
    • 自定义拦截器步骤
  • 手机扫描二维码访问

    本文标题:《SpringMVC 拦截器》作者:极四维博客
    原文链接:https://cway.top/post/549.html
    特别注明外均为原创,转载请注明。

    分享到微信

    扫描二维码

    可在微信查看或分享至朋友圈。

    上一篇: SpringMVC异常处理

    相关文章

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    «    2024年10月    »
    123456
    78910111213
    14151617181920
    21222324252627
    28293031

    搜索

    控制面板

    您好,欢迎到访网站!
      查看权限

    最新留言

    文章归档

    • 订阅本站的 RSS 2.0 新闻聚合