springmvc拦截器

Spring MVC的拦截器(Interceptor) 与Java Servlet的过滤器(Filter) 类似,它
主要用于拦截用户的请求并做相应的处理。通常应用在权限验证、记录请求信息的日
志、判断用户是否登录等功能上。

拦截器与过滤器区别:
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,拦截器里可以注入一个service,可以调用业务逻辑。

拦截器配置

<!--    拦截器  -->
    <mvc:interceptors>
<!--        多个拦截器顺序执行  第一个  -->
        <mvc:interceptor>
<!--            /**表示所有url包括url路径         /*   -->
<!--            你要拦截的请求    配置拦截器作用的路径 -->
            <mvc:mapping path="/**"/>
<!--            不拦截的请求       定义在<mvc:interceptor>元素中,表示匹配指定路径的请求才进行拦截  -->
            <mvc:exclude-mapping path="/api/stu/findAll"/>
            <bean id="interceptor1" class="com.HandlerInterceptor.HandlerInterceptor1"></bean>
        </mvc:interceptor>

<!--  第二个 -->
        <mvc:interceptor>
<!--            你要拦截的请求-->
            <mvc:mapping path="/api/stu/find"/>
<!--            不拦截的请求  -->
            <bean id="interceptor2" class="com.HandlerInterceptor.HandlerInterceptor2"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
package com.HandlerInterceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HandlerInterceptor1 implements HandlerInterceptor {

    //进入Handler方法之前执行
    //用于身份认证、身份授权
    //比如身份认证,如果认证通过表示当前用户没有登录,此方法拦截不再向下执行
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                             HttpServletResponse httpServletResponse, Object o) throws Exception {

        System.out.println("1执行业务逻辑之前,被执行");
        // return false  表示拦截,不向下执行
        // return true  表示放行
        return true;
    }

    //进入Handler方法之后返回modelandview之前执行
    //应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
    @Override
    public void postHandle(HttpServletRequest httpServletRequest,
                           HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("1执行业务逻辑之后,解析渲染视图之前,被执行");
    }

    //执行Handler完成此方法
    //应用场景:统一异常处理,统一日志处理
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest,
                                HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("1执行业务逻辑之后,视图渲染之后,被执行");
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值