SpringMVC的拦截器用过没有?

简介: 拦截器常用于登录校验、参数处理、数据脱敏等,通过实现`HandlerInterceptor`接口,并在配置类中注册,限定拦截路径。与过滤器相比,拦截器基于Spring容器,仅拦截Controller请求,而过滤器作用于所有Web资源。异常处理可使用`@RestControllerAdvice`和`@ExceptionHandler`实现全局捕获。常用注解包括`@RequestMapping`、`@RequestBody`、`@RequestParam`、`@PathVariable`、`@ResponseBody`等,简化开发。

·必答内容:
拦截器的应用场景还是很多的,比如在项目中,我们基于拦载器实现登录校验的功能、参数统一转换处理、数据的脱敏、统一编码处理等功能。在SpringBoot项目拦截器的使用分为两步进行:第一步呢,需要定义一个类实现Handlerlnterceptor接口,然后再实现接口中的方法,比如:preHandlepostHandle、afterCompletion.
第二步呢,就是需要定义一个配置类,然后实现WebMvcConfigure,然后在这个配置类中配置拦截器,指定拦载器的拦载路径、排除哪些路径等信息
。可能继续追问的问题:
你说的这些个功能,过滤器好像也能干,那拦载器Interceptor 与 过滤器Filter有什么区别?
接口规范不同:过滤器需要实现Filter接口,而拦载器需要实现Handlernterceptor接口
拦载范围不同:过滤器Filter会拦载web服务器中的所有资源,而Interceptor只会拦截Spring环境的资源,主要就是Controller。
实现机制不同:过滤器在实现上是基于函数回调的,拦截器是基于java的反射机制的,属于面向切面编程的-
种运用。
那其实在开发中,很多的功能,我们既可以通过过滤器Filter来实现,也可以通过拦截器Interceptor来实现
SpringMVC怎么处理异常?
SpringMVC的异常处理,就比较简单了,可以直接使用Spring MVC中的全局异常处理器对异常进行统一处理,此时在我们的三层架构中,都不需要处理异常了,如果运行过程中出现异常,最终会被全局异常处理器捕获,然后返回统一的错误信息。
开发一个全局异常处理器需要使用到两个注解:@RestControllerAdvice、@ExceptionHandler@RestControllerAdvice加在全局异常处理器的这个类上,而@ExceptionHandler加在异常处理的方法上,来指定这个方法捕获什么样的异常。
那在定义异常处理方法的时候,可以也定义多个,根据业务的需求,可以针对不同类型的异常,进行不同的处理.
聊聊SpringMVC中的常用注解?
SpringMVC中的注解就比较多了,平时项目开发中比较常用的注解有以下几个:
1、@RequestMapping:用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径。我们也可以基于该注解中的method属性,来限定请求方式,由此也衍生了几个注解,如:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping.
2、@RequestBody:该注解实现接收请求的json数据,将json转换为java对象
3、@RequestParam:指定请求参数的名称,如果请求参数名与方法形参不一致,可以使用此注解映射绑定也可以使用该注解来设置参数的默认值
4、@PathViriable:从请求路径中获取请求参数(/user/{id}),传递给方法的形式参数。
5、@ResponseBody:注解实现将controller方法返回值直接作为请求体响应,如果返回值是对象/集合,会转化为ison对象响应给客户端

相关文章
|
1天前
|
程序员 API
7、Lambda表达式
Lambda表达式又称匿名函数,语法为(参数)->表达式,本质是函数对象,用于行为参数化,如Stream API、QueryWrapper等场景。相比匿名内部类,Lambda更简洁,需配合函数式接口使用,且在运行时动态生成类,其this指向也与匿名内部类不同。
|
1天前
|
存储 安全 Java
2.2说说java中常见的集合类
Java集合框架包含Collection和Map两大体系。Collection有List(有序可重复)和Set(无序唯一)两个子接口,常见实现类有ArrayList、LinkedList、Vector和HashSet等;Map接口用于存储键值对,常见实现有HashMap、TreeMap、Hashtable和ConcurrentHashMap。其中,ArrayList基于数组,查询快;LinkedList基于链表,增删快;HashMap基于哈希表,支持高效存取,而ConcurrentHashMap则提供高并发性能。
|
1天前
|
安全 Java 数据库连接
第五章 spring框架
Spring的IOC(控制反转)将对象创建交给容器管理,避免手动new;DI(依赖注入)则让容器自动注入所需对象。通过@Controller、@Service等注解声明Bean,使用@Autowired或@Resource实现注入。默认单例Bean无并发控制,若无状态则线程安全,否则需自行保证。
|
1天前
|
存储 算法 Java
6、JVM 虚拟机
JVM堆内存布局因垃圾回收器而异:传统GC将堆分为老年代和年轻代(Eden、S0、S1),G1则划分为多个Region,可动态充当Eden、Survivor、老年代或巨型对象区。常用垃圾回收算法有标记-清除(快但碎片化)、标记-整理(无碎片,较慢)和标记-复制(无碎片,适合存活对象少的场景)。
|
1天前
|
存储 缓存 安全
Java基础
初始化Map宜用Guava指定预期大小,避免扩容;禁用Executors创建线程池,防止OOM,推荐手动定义或使用Guava;Arrays.asList返回不可变列表,禁止修改操作;遍历Map优先使用entrySet或forEach;SimpleDateFormat非线程安全,建议用Java 8时间类替代;并发修改记录需加锁,推荐乐观锁配合version机制。
|
1天前
|
存储 安全
HTTP协议中常见的状态码?
HTTP状态码分为1xx到5xx五类,常见如200(成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器错误)等。转发是服务器内部跳转,客户端无感;重定向由浏览器发起新请求。Cookie通过Set-Cookie和Cookie头实现会话跟踪,但数据存于客户端,安全性较低。
|
1天前
|
网络协议 安全 网络安全
第三章 web阶段
HTTP协议即超文本传输协议,是客户端与服务器通信的规则,基于TCP协议,具有无状态、面向连接的特点。现代Web开发多采用HTTP或HTTPS协议。相比HTTP明文传输,HTTPS通过SSL加密保障数据安全,端口为443,更安全但资源消耗更高。GET与POST是常见请求方式:GET参数在URL中传递,长度受限且安全性低,用于获取数据;POST参数在请求体中,安全性高,适合提交数据。当前主流项目多采用Restful风格,通过URL定位资源,通过请求方式(GET/POST/PUT/DELETE)定义操作类型。
|
1天前
|
索引
2.3HashMap原理(数据结构)
HashMap底层基于数组+链表+红黑树。数组通过key的hashCode计算索引,实现O(1)存取。但因数组容量有限,易发生哈希冲突。解决方法是用链表将冲突元素串联,但链表过长会导致性能下降至O(n)。为此引入红黑树,当链表长度≥8且数组容量≥64时树化,提升查找效率至O(log n);若树节点减少,则退回链表以节省空间。
|
1天前
|
存储 关系型数据库 MySQL
第四章 数据库
MySQL中char为定长字符串,空间固定但易浪费;varchar为变长字符串,节省空间但性能略低。事务是保证数据一致性的操作集合,具备ACID四大特性:原子性、一致性、隔离性、持久性。并发事务可能引发脏读、不可重复读、幻读等问题,通过不同隔离级别解决,默认为可重复读。
|
1天前
|
存储 算法 Java
基础算法
加密算法分为对称加密(如AES、SM4)、非对称加密(如RSA、SM2)、哈希摘要(如SHA-2、SM3)、电子签名及密码存储技术。对称加密加解密速度快,密钥相同需严守;非对称加密使用公私钥,安全性高但较慢;哈希摘要是数据特征码,用于完整性校验,具备唯一性。