• 过滤器、拦截器、SpringAop


    过滤器:

    过滤器是servlet提供的API,需要实现javax.servlet.Filter接口。过滤器可以拦截到方法的请求和响应(ServletRequest request, SetvletResponse response),并对请求响应做出的过滤操作,比如设置字符编码、鉴权操作。
    过滤器方法的入参有request,response,FilterChain,其中FilterChain是过滤器链,使用比较简单,而request,response则关联到请求流程,因此可以对请求参数做过滤和修改,同时FilterChain过滤链执行完,并且完成业务流程后,会返回到过滤器,此时也可以对请求的返回数据做处理。

    spring拦截器:

    拦截器是spring提供的API,需要实现 org.springframework.web.servlet.HandlerInterceptor接口
    拦截器拦截的是URL,获取请求中的参数信息比较麻烦;
    拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。

    Spring中拦截器有三个方法:preHandle,postHandle,afterCompletion。分别表示如下

    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)表示被拦截的URL对应的方法执行前的自定义处理

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)表示此时还未将modelAndView进行渲染,被拦截的URL对应的方法执行后的自定义处理,。

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)表示此时modelAndView已被渲染,执行拦截器的自定义处理。

    AOP:

    AOP操作可以对方法(spring管理的bean)进行横向的拦截,最大的优势在于可以获取执行方法的参数,对方法进行统一的处理,常见使用日志,事务,请求参数安全验证等。

    三者使用场景类似
    从过滤器--》拦截器--》切面,拦截规则越来越细致,执行顺序依次是过滤器、拦截器、切面。
    一般情况下数据被过滤的时机越早对服务的性能影响越小,因此我们在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是aop。
    比如权限校验,一般情况下,所有的请求都需要做登陆校验,此时就应该使用过滤器在最顶层做校验;日志记录,一般日志只会针对部分逻辑做日志记录,
    而且牵扯到业务逻辑完成前后的日志记录,因此使用过滤器不能细致地划分模块,此时应该考虑拦截器,
    然而拦截器也是依据URL做规则匹配,因此相对来说不够细致,因此我们会考虑到使用AOP实现,AOP可以针对代码的方法级别做拦截,很适合日志功能。

  • 相关阅读:
    通过ssh反向代理相对安全的使用docker2375端口
    Django在现有数据库表中新增/修改字段
    python 判断多边形顺逆时针
    .stl 转ply
    python 求直线延长线和矩形的交点
    python Pillow画图总结
    djangoapscheduler插件来实现Django中的定时任务
    cxf 线程安全
    MySQL的全文搜索索引
    [Conda] Conda/Miniconda简单配置与使用
  • 原文地址:https://www.cnblogs.com/quartz/p/12601091.html
Copyright © 2020-2023  润新知