spring拦截器使用实践

spring拦截器使用说明

一.spring中的拦截器能干什么?

简而言之,拦截请求

二.如何实现一个拦截器?

以最简单的session校验为例,拦截请求,校验请求cookie中的session是否有效,无效则返回对应的错误提示信息。

三.拦截器的具体实现步骤

1.实现HandlerInterceptor接口

HandlerInterceptor接口中有3个方法

preHandle:方法执行之前执行,

postHandle:方法执行之后执行,

afterCompletion:方法执行完成时执行,

当preHandle返回结果为true,才会继续后面的postHandle方法

HandlerInterceptor接口

因为我们是要拦截请求校验session,是在controller层的方法之前,所以实现其中的preHandle,代码如下图所示

拦截器的具体实现

如图所示,获取请求中的cookie,校验是否携带sid字段,当不存在,直接返回sid缺失;再校验携带的sid是否有效,若无效,则处理缓存及数据库中的sid状态

2.注册拦截器

实现拦截器的基本功能后,实现WebMvcConfigurer接口,注册该拦截器

注册session校验的拦截器

注册时,添加需要拦截的路径,以及不需要拦截的路径。如上图,我们拦截所有请求,同时排除用户登录、注册的路径

四.使用拦截器的tips

当访问白名单中的接口过程中出现异常,例如/user/login接口,则会重定向到/error路径,而/error路径不在白名单中,所以也会被拦截,那么在当前的业务场景下,则会出现session无效的错误

如何解决上述问题?

使用全局异常处理,使用@RestControllerAdvice,可以将结果转为json格式,统一返回

全局异常处理

我们在拦截器发现sid无效时,可以直接抛出session无效的异常,通过GlobalExceptionHandler处理,格式化返回数据。同时在service层处理时也可以跑出对应的异常,统一处理,将返回数据格式化输出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容