Java学习之SpringMVC 拦截器

Java学习之SpringMVC拦截器0x00前言继续SpringMVC最后一点小内容,后面就该学习如何整合SSM框架了。0x01拦截器拦截器和前面提到的一个过滤器类似,但是他们还是

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java学习之SpringMVC 拦截器

0x00 前言

继续 Spring MVC最后一点小内容,后面就该学习如何整合SSM框架了。

0x01 拦截器

拦截器和前面提到的一个过滤器类似,但是他们还是有些区别的。

拦截器和过滤器区别:

1.过滤器在任何框架都可以使用,而拦截器是Spring MVC独有的。

2.过滤器配置/ * 拦截所有资源,所有静态资源都会被拦截,而拦截器只会拦截控制器的方法。

拦截器可以用在权限验证,比如在访问后台资源的时候,经过拦截器看请求有没有进行身份验证,身份验证通过后放行,否则跳转会后台登陆页面。

0x02 自定义拦截器

如果我们需要定义拦截器必须实现HandlerInterceptor接口。

HandlerInterceptor接口中三个方法的作用:

1. preHandle方法是controller方法执行前拦截的方法
    1.1 可以使用request或者response跳转到指定的页面
    1.2 return true放行,执行下一个拦截器,如果没有拦截器,执行controller中的方法。
    1.3. return false不放行,不会执行controller中的方法。
    
    
2. postHandle是controller方法执行后执行的方法,在JSP视图执行前。
    2.1 可以使用request或者response跳转到指定的页面
    2.2 如果指定了跳转的页面,那么controller方法跳转的页面将不会显示。
    
3.afterCompletion方法是在JSP执行后执行
    3.1 request或者response不能再跳转页面了

实现preHandle方法

首先还是的写一个控制器

HelloContraoller代码:



@Controller
@RequestMapping(path = "/user")
public class HelloContraoller {



    @RequestMapping(path = "/lanjieqi")
    public String submit(){

        return "success";
    }


}


然后就可以自定义我们的拦截器了,让我们继承的类继承HandlerInterceptor接口,重写preHandle方法,该方法会在控制器执行前执行的方法。

MyInterceptor代码:



public class MyInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行");
        request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
        return false;
    }


}

最后只需要把自定义的拦截器在springmvc.xml的配置文件里面配置好就行了。

springmvc.xml:

<mvc:interceptors>
        <mvc:interceptor>
<!--            配置拦截器拦截路径-->
            <mvc:mapping path="/user/*"/>
<!--            注入自定义拦截器-->
            <bean class="com.test.domain.MyInterceptor"/>

        </mvc:interceptor>
    </mvc:interceptors>

postHandle方法实现

public class MyInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行");
        request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("控制器执行后执行");
    }
}

postHandle 该方法会在Controller控制器执行后进行执行。

afterCompletion 方法实现



public class MyInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行");
        request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("控制器执行后执行");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("jsp页面执行后执行");
    }
}

该方法会在jsp执行后进行执行。

配置多个拦截器

<mvc:interceptors>
        <mvc:interceptor>
<!--            配置拦截器拦截路径-->
            <mvc:mapping path="/user/*"/>
<!--            注入自定义拦截器-->
            <bean class="com.test.domain.MyInterceptor"/>

        </mvc:interceptor>
        <mvc:interceptor>
            <!--            配置拦截器拦截路径-->
            <mvc:mapping path="/user/*"/>
            <!--            注入自定义拦截器-->
            <bean class="com.test.domain.MyInterceptor1"/>

        </mvc:interceptor>
    </mvc:interceptors>

0x03 结尾

文章完结撒花,下篇文章开始更新ssm框架的整合。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119926.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 卸载docker命令_删除docker0虚拟网卡

    卸载docker命令_删除docker0虚拟网卡#!/bin/shecho”startuninstallingdocker”echo”=======================================”#停止docker服务sudosystemctlstopdocker#杀死docker进程(为防止特殊情况下有残留的docker进程)#ps-ef|grepdocker|awk'{print$2}’|xargssudokill-s9#删除执行状态文件的根目录sudo…

    2022年9月8日
    4
  • SpringCloud服务注册中心双节点集群(Eureka集群)

    SpringCloud服务注册中心双节点集群(Eureka集群)0、前言    最近在进行重构一个新项目,为了后续更好的落地,适应于日新月异的技术更新,进行了各方的技术选型及技术预研,最终选型基于微服务架构体系进行开发重构。项目构建前最重要的一步就是要想清楚,整体的部署架构、高可用性(HA)等等,做好前期的部署架构技术调研,确定最终方案。    在微服务架构体系中,核心技术便是SpringCloud,通过登录官网查看SpringClo…

    2022年6月11日
    30
  • 汇编语言——移位指令[通俗易懂]

    基本概念移位操作指令:移位操作指令是一组经常使用的指令,属于汇编语言逻辑指令中的一部分,它包括移位指令(含算术移位指令、逻辑移位指令),循环移位指令(含带进位的循环移位指令),双精度移位指令三大类。其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0~255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。基本格式格式为…

    2022年4月16日
    144
  • android 小米pad 调试,小米平板2 开启USB调试模式「建议收藏」

    android 小米pad 调试,小米平板2 开启USB调试模式「建议收藏」我们要将小米平板2与电脑进行连接,就必须要打开小米平板2系统的调试模式,不同的系统版本打开调试模式的方法有所不同,在这里我们就谈谈小米平板2各种系统版本打开USB调试模式的方法。1、针对Android2.1-2.2版本的系统:我们在桌面按小米平板2手机上的“菜单键”会弹出菜单,点击“设置”选项进入系统的设置菜单列表,然后进入“应用程序”—“开发”,就可以看到“USB调试”选项,我们勾选即可…

    2022年9月13日
    2
  • 401错误的解决方法_网络连接错误401

    401错误的解决方法_网络连接错误401在配置IIS的时候,如果安全稍微做的好一些。就会出现各式各样的问题。比如,常见的访问网页会弹出用户名密码的登陆界面,或者是访问某种页面比如html,asp没事情,但是访问jsp或者php就有问题,显示401.3 ACL禁止访问资源等  通常的解决办法是。          第一,看iis中(不管iis5还是iis6) ,网站或者目录,包括虚拟目录的属性,看目录安全性选项卡中的 编辑…

    2025年6月3日
    2
  • Matlab基本函数-length函数

    Matlab基本函数-length函数1、length函数:计算向量或矩阵的长度2、用法说明   y=length(x)函数计算指定向量或矩阵的长度y。如果参数变量x是向量,则返回其长度;如果参数变量是非空矩阵,则length(x)与max(size(x))等价3、举例说明>>x=’youhaidong’x=youhaidong>>y=length(x)y=10

    2022年6月12日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号