前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java学习之SpringMVC 拦截器

Java学习之SpringMVC 拦截器

作者头像
全栈程序员站长
发布2022-07-13 19:30:31
发布2022-07-13 19:30:31
57400
代码可运行
举报
运行总次数:0
代码可运行

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

Java学习之SpringMVC 拦截器

0x00 前言

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

0x01 拦截器

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

拦截器和过滤器区别:

代码语言:javascript
代码运行次数:0
复制
1.过滤器在任何框架都可以使用,而拦截器是Spring MVC独有的。

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

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

0x02 自定义拦截器

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

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

代码语言:javascript
代码运行次数:0
复制
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代码:

代码语言:javascript
代码运行次数:0
复制
@Controller
@RequestMapping(path = "/user")
public class HelloContraoller {



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

        return "success";
    }


}

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

MyInterceptor代码:

代码语言:javascript
代码运行次数:0
复制
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:

代码语言:javascript
代码运行次数:0
复制
<mvc:interceptors>
        <mvc:interceptor>
<!--            配置拦截器拦截路径-->
            <mvc:mapping path="/user/*"/>
<!--            注入自定义拦截器-->
            <bean class="com.test.domain.MyInterceptor"/>

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

postHandle方法实现

代码语言:javascript
代码运行次数:0
复制
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 方法实现

代码语言:javascript
代码运行次数:0
复制
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执行后进行执行。

配置多个拦截器

代码语言:javascript
代码运行次数:0
复制
<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.cn/119926.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java学习之SpringMVC 拦截器
    • 0x00 前言
    • 0x01 拦截器
    • 0x02 自定义拦截器
      • 实现preHandle方法
      • postHandle方法实现
      • afterCompletion 方法实现
      • 配置多个拦截器
    • 0x03 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档