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框架的整合。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java接口和抽象类区别面试题_接口是一个特殊抽象类

    java接口和抽象类区别面试题_接口是一个特殊抽象类原文:http://blog.csdn.net/sunboard/article/details/38318231.概述一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可

  • 数据库 建模_可视化建模与uml

    数据库 建模_可视化建模与uml(1)数据库建模  1,ERWin:CA公司出品的拳头产品,强大的老牌数据库建模工具。它有一个兄弟是BPWin,这个是CASE工具的一个里程碑似的产品。目前的我使用的版本是4.0。ERWin界面相当简洁漂亮,也是采用ER模型,如果你是开发中小型数据库,极力推荐ERWin,它的Diagram给人的感觉十分清晰。在一个实体中,不同的属性类型采用可定制的图标显示,实体与实体的关系也一目了然。当然

    2022年10月29日
  • vmware15最新激活码2021_通用破解码

    vmware15最新激活码2021_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Python系列文章索引

    >>>importthisTheZenofPython,byTimPetersBeautifulisbetterthanugly.Explicitis

    2021年12月30日
  • ps制作图案浮雕字效果_ps怎么设置文字浮雕效果

    ps制作图案浮雕字效果_ps怎么设置文字浮雕效果Q:ps如何做浮雕字A:小婷整理此问题:ps浮雕字怎么做的答案。如下面图像石头上面的浮雕字,在photoshop教程中的做法很多。小婷就以PS中图层样式中的“斜面和浮雕”来完成。感兴趣,不妨随意找一张图像,我们一起动手试试。 ps如何做浮雕字教程详细操做步骤如下:1.按下CTRL+O,弹出打开对话框,选择石头图像文件。2.按下CTRL+J,复制背景图层,得到图层1.3.

  • Eclipse自动补全设置「建议收藏」

    Eclipse自动补全设置「建议收藏」最简单的修改方式是:Windows——>Preferences——>Java–>Editor–>ContentAsis在AutoactivationtriggersforJava后面的文本框里只有一个“.”现在你将其改为“.abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWSYZ_”即可。

发表回复

您的电子邮箱地址不会被公开。

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