拦截器

1.了解概括

拦截器是一种切面思想,spring框架中实现了这种思想,提供了拦截器技术的相关接口,常用于日志拦截,登录判断等泛化流程处理中,可结合注解细化拦截范围。

2.基本使用步骤

a. 按照Spring MVC的方式编写一个拦截器类,实现HandlerInterceptor接口

在03-springboot-web中创建interceptor包,并创建一个LoginInterceptor拦截器

代码示例:

package com.bjpowernode.springboot.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {@Override //进入Controller之前执行该方法public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//登录拦截的业务逻辑System.out.println("-------登录请求拦截器--------------");System.out.println(request.getRequestURI().toString());Object object = request.getSession().getAttribute("user");if (object == null) {System.out.println("用户没有登录");return false;}//继续提交请求,false 请求不提交了return true;}
}

b   通过配置类注册拦截器

在03-springboot-web中创建一个config包,创建一个配置类InterceptorConfig,并实现WebMvcConfigurer接口, 覆盖接口中的addInterceptors方法,并为该配置类添加@Configuration注解,标注此类为一个配置类,让Spring Boot 扫描到,这里的操作就相当于SpringMVC的注册拦截器 ,@Configuration就相当于一个applicationContext-mvc.xml

代码示例:

package com.bjpowernode.springboot.config;import com.bjpowernode.springboot.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {//需要拦截的路径,/**表示需要拦截所有请求String[]addPathPatterns={"/**"};//不需要拦截的路径String [] excludePathPaterns={"/boot/get","/boot/post","/boot/put","/myservlet"};//注册一个登录拦截器registry.addInterceptor(new LoginInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPaterns);//注册一个权限拦截器  如果有多个拦截器 ,只需要添加以下一行代码//registry.addInterceptor(new LoginInterceptor())// .addPathPatterns(addPathPatterns)// .excludePathPatterns(excludePathPatterns);}
}

c 细化拦截范围

配合注解可细化到方法拦截粒度,首先定义一个注解,然后再需要拦截判断的方法处加注解,最后在拦截器的handler中判断是否有这个注解,根据注解分流处理业务逻辑。在业务代码层产生了一定的侵染。

3.细节总结

aop

1.了解概况

AOP是一种切面编程的思想,不同于顺序编程,这是一种追求代码零侵染的横向编程思想,只需在配置类中,配置作用点和业务逻辑即可。spring也支持这种思想,实现了相关的接口,提供了更加便捷注解配置方式。

2.使用步骤

1:在pom文件中引入依赖

copy<dependency>    <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2:编写AOP类,在类上使用@Aspect、@Component注解。(What层面)

@Aspect:标识这个类是切面类。
@Component:把该类作为bean配置到Ioc容器里。

pic-1590653205702.png

3:编写切入点方法,在方法上使用@PointCut(execution(public * ...))(where层面)

pic-1590653205703.png

重点讲解下execution表达式部分,execution是执行的意思。public * com.cx.timer...看起来非常复杂,晦涩难懂。其实这里就是一个方法名的定义:作用域 返回类型 方法名(参数..)
其中上图的作用域是:public返回类型:* (* 表示Object类型)方法名(参数..) :com.cx.timer.aop.controller是指具体的包名;.* 表示 该包名下的所有的类;*(..) 表示类下所有的方法,不限定参数。

4:编写切面方法,在想要处理的业务上使用@Before、@AfterReturning、@After、@Around、@AfterThrowing注解。(when层面)

@Before:在切入点方法执行之前执行该方法。
@AfterReturning:在切入点方法执行并有返回值才执行该方法。
@After:在执行切入点方法之后执行该方法。
@Around:在执行切入点方法的前后执行该方法。
@AfterThrowing:在切入点方法抛出异常的时候执行该方法。

pic-1589440513931.png

3.细节整理

对比分析

java拦截器与AOP的区分理解相关推荐

  1. 区分Java拦截器和过滤器

    今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...

  2. java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高

    java拦截器项目应用 在开发具有某些性能要求的Java EE应用程序时,必须在每个发行版之前验证是否满足这些要求. 您可能会想到,哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量. ...

  3. 过滤器、拦截器和AOP的分析与对比

    文章目录 一.过滤器(Filter) 1.1 简介 1.2 应用场景 1.3 源码分析 二.拦截器(Interceptor) 2.1 简介 2.2 应用场景 2.2 源码分析 三.面向切面编程(AOP ...

  4. 过滤器,拦截器,aop 比较

    Filter过滤器 过滤器拦截web访问url地址. 严格意义上讲,filter只是适用于web中,依赖于Servlet容器,利用Java的回调机制进行实现. Filter过滤器:和框架无关,可以控制 ...

  5. java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...

  6. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求 Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断 ...

  7. JAVA拦截器(Interceptor)实现以及原码示例

    JAVA拦截器(Interceptor)实现以及原码示例 概念 SpringMVC中拦截器[interceptor] 一.实现拦截器代码 二.单/多 个拦截器运行 1.单个拦截器 2.多个拦截器 源码 ...

  8. Redis + Java拦截器实现用户匿名和非匿名访问

    文章目录 需求 实现截图 核心代码 WebMvcConfigurer HandlerInterceptor 判断用户是否有权限 ThreadLocal 该篇文章以<Redis实现短信验证码登录& ...

  9. java 拦截器ajax_(转)拦截器深入实践 - JAVA XML JAVASCRIPT AJAX CSS - BlogJava

    Interceptor的定义 我们来看一下Interceptor的接口的定义: Java代码 publicinterfaceInterceptorextendsSerializable { /** * ...

  10. java 拦截器_Spring的春天来啦——百战Java课程更新(2019.09.06)

    百战程序员运营400天,课程突破10000节,周周有新课更新,保持行业领先,九大专业运营.注册人数突破70万人,超级VIP用户累计8358人.百战程序员,由50+专家.精英讲师组成课程研究院,根据市场 ...

最新文章

  1. phpcms中调用外部网站数据
  2. 2021 阿里云容器服务年度盘点:企业级容器应用变化和技术趋势观察
  3. 指针c语言求电阻的并联值,计算电阻使之符合要求值,,“简单”的难题!!!...
  4. FineUI(专业版)v3.1发布(ASP.NET控件库)!
  5. Android LeakCanary的使用和原理
  6. 美国数据不佳美元仍跳升,只因欧元区问题更多
  7. 底层电子电路基础知识
  8. 神经网络算法的关键参数,神经网络计算方法
  9. 小微信贷传统风控模型的痛点
  10. Ogre – 材质脚本(三) (转)
  11. 数学建模——红酒品质分类
  12. SSH登录的两种方式
  13. crontab shell 每5秒执行_shell之定时周期性执行脚本-crontab
  14. 在Qt的公式计算中输入常量数值时的注意点
  15. Scylladb 高可用测试结果
  16. c++实现鼠标连点器
  17. 最新信管/资管/博易大师软件源码+通达信配资/外汇模拟
  18. 步进电机A4988 中文说明
  19. 引流软件靠谱吗,当下引流软件那么多要怎样选择好用的软件呢?
  20. 2020年最新中国行政地区三级、四级、五级地址库(包含京东)

热门文章

  1. java excel 转txt_用Java实现excel转txt
  2. matlab log函数
  3. Python设计模式:命令模式
  4. python怎么查询帮助信息_Python 查看模块的帮助文档,方法和帮助信息
  5. QT编程编程入门系列文章之一——QT编程简介
  6. Beekeeper Studio:一款高颜值且免费的 SQL 开发工具
  7. 软考-软件设计师 知识点整理(一篇就过了 建议收藏)
  8. c语言手机表白代码大全,C语言表白代码
  9. Matlab程序转为C++代码
  10. 推荐6款程序员开发编译工具