0
点赞
收藏
分享

微信扫一扫

springMVC的拦截器

一条咸鱼的干货 2022-04-15 阅读 101
spring

什么时拦截器

springMVC的拦截器就相当于servlet开发中的过滤器Filter,用于对请求进行处理以及预处理。将拦截器按照一定的顺序链接成一条链这条链被称为拦截器链,在访问被拦截的方法或者是字段时,拦截器链中的拦截器就会按照之前定义的顺序进行执行,拦截器也是AOP思想的具体实现。

拦截器与过滤器的区别:

自定义拦截器的开发步骤:

创建拦截器的实现类:
 

public class MyIntercepoter implements HandlerInterceptor {
 //在目标方法执行之前进行执行。
    //参数中  有springMVC封装的 request respond对象  可以用他们来进行操作创痛Sevlet开发中额所有操作
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("目标方法之前执行");
        String username = request.getParameter("username");
        if ("xiaozhang".equals(username))

            return true;
        else//返回的boolean的  如果是flase的话  就表示 对资源不放行,下面的方法也就执行不了【这样的话下面所有的操作都将无法执行】  true表示放行通过这个就可以实
        // 现拦截操作  
        {
            //request.getRequestDispatcher("/jsp/error.jsp").forward(request,response);
            //使用请求重定向的话就是两次请求了,还会在次经过拦截器
            response.sendRedirect("http://localhost:8080/SpringSSM_war_exploded/save15");
            return false;
        }


    }


//在目标方法执行之后进行执行,视图返回之前执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("目标方法执行之后进行执行,返回视图之前");




        //这个方法的参数中同样封装了request,response,以及ModelAndView   其中ModelAndView属性可以获取
        // ,目标资源 你自己创建的ModelAndView对象,在这里可以对目标资源中ModelAndView设置的一些属性进行一些操作

       modelAndView.addObject("suername","xaiozhang");  //这里的modelAndView和目标资源中的modelAndView对象是一个对象
       modelAndView.setViewName("sds");





    }
    //在整个流程都执行完毕之后执行

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("这个流程执行完毕");
    }
}

在springMVC配置文件中进行配置注册拦截器


<!--    配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
<!--         表示对那些资源进行拦截操作-->
            <mvc:mapping path="/**"/>
<!--            表示使用那写拦截器实现对那些资源的拦截-->
            <bean class="com.itheima.zhujie.intercepoter.MyIntercepoter"/>
        </mvc:interceptor>
    </mvc:interceptors>

拦截器链

连接器链的执行流程:

 拦截器链的执行流程,和配置拦截器的顺序有关。

示例代码:


<!--    配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
<!--         表示对那些资源进行拦截操作-->
            <mvc:mapping path="/**"/>
<!--            表示使用那写拦截器实现对那些资源的拦截-->
            <bean class="com.itheima.zhujie.intercepoter.MyIntercepoter"/>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.itheima.zhujie.intercepoter.MyIntercepoter1"/>
        </mvc:interceptor>
    </mvc:interceptors>

 

举报

相关推荐

0 条评论