SpringMVC拦截器

SpringMVC拦截器

SpringMV的处理器拦截功能类似于Servlet规范中的过滤器Filter,用于对处理器Handle进行预处理和后处理 ,区别就是和Filter加载的时机不一样

开发步骤:创建一个自定义 的拦截器实现HandleInterceptor接口,该接口定义了我三个方法

public class MyInterceptor01 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // chain.doFilter(req,resp)
        // false  拦截客户端发送的请求,前提是必须经过前端控制器  弱与Filter过滤器
        System.out.println(request+"--------------");
        System.out.println(response+"-----------------");
        System.out.println(handler+"------------------");
        // 逻辑判断
        // 如果用户已经登录了,那么应该进行资源放行
        Object user = request.getSession().getAttribute("login_user");
        if (user != null) {
            // 登录过 用户经过校验了
            return true;
        }
        // 跳转到登录页面
        response.sendRedirect(request.getContextPath() + "/index.jsp");
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println(request+"====================");
        System.out.println(response+"====================");
        System.out.println(handler+"====================");
        System.out.println(modelAndView+"====================");
        /**
         * 主要就是对 ModelAndView modelAndView 数据和视图做处理
         */
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println(request+"++++++++++++++++++++++");
        System.out.println(response+"++++++++++++++++++++++");
        System.out.println(handler+"++++++++++++++++++++++");
        System.out.println(ex+"++++++++++++++++++++++");
        /**
         * 资源的释放 查看一些请求服务器的日志
         *
         */
}

preHandle:预处理回调方法,实现处理器的预处理,在客户端请求到达控制器之前做一次拦截(登录效验或则权限验证)

该方法中有几个参数

HttpServletRequest:请求对象

HttpServletResponse:响应对象

Object处理对象(响应的处理器)

还有返回值:boolean布尔类型 如果返回值为false,则地阿比到拦截该请求不到达控制器,相当于此次的请求就结束了,此时我们可以respones来进行响应,如果返回值是true,则代表放行客户端的请求

postHanle:后处理回调的方法,控制器中的代码已经加载完毕(在组装ModelAndView独享之前) 此时你可以在该方法中电仪ModelAndVIew中的数据。指定model中的传输的数据和制定跳转的试图地址,你可以把它设置为null

afterCompletion:在整个方法请求结束后,组装完ModelAndView对象,即将传输给前端控制器之前拦截。

上面操作完成后在springmvc.xml文件中设置自定义拦截器 交给spring容器管理

<!--配置自定义的拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--映射后端服务器的请求的资源路径  ** 代表所有包含子目录中的请求  .. -->
        <mvc:mapping path="/**"/>
        <!--放行登录的请求资源-->
        <!--排除那些资源不拦截-->
        <mvc:exclude-mapping path="/user/login.action"/>
        <!-- <mvc:exclude-mapping path="/role/**"/>-->
        <bean class="com.zhiyou100.web.interceptor.MyInterceptor01"/>
    </mvc:interceptor>

    <!--配置多个拦截器-->
    <mvc:interceptor>

        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/user/login.action"/>
        <bean class="com.zhiyou100.web.interceptor.MyInterceptor02"/>
    </mvc:interceptor>
</mvc:interceptors>

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值