使用AOP校验用户登录和异常处理-2020-10-26

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用AOP校验用户登录和异常处理-2020-10-26相关的知识,希望对你有一定的参考价值。

参考技术A 用户登录验证在所有业务中基本都有涉及,这里使用AOP的方式进行用户登录的校验拦截

前提:当前项目为Spring-Boot的项目,项目在IDEA下使用了lombok插件

由于SpringBoot项目的SPI机制,此处引入依赖包之后,就不用额外做配置了

用于在需要校验登录的方法入口处做标记

创建一个Aspect用来处理做了上述自定义注解标记的方法

经过上述步骤之后,在需要验证的方法上打上 @CheckLogin 的自定义注解,就可以实现token的校验了

这里使用的是AOP的环绕切入,原理是将需要调用的目标方法包入 CheckLoginAspect 的前置逻辑中@Around的意思为环绕切入,在方法前通过获取Request并从Request中获取到header,然后再从header中获取到“X-Token”,之后的方法就是通过jwt工具类进行校验和一些参数放置到request的操作,直到执行 point.proceed(); 方法才是需要调用到的目标类

几个注解的含义

这里检测到token异常之后,会抛出一个 SecurityException 实际上这个只是继承了 RuntimeException ,方便在异常处理时分辨异常的类型

接下来,添加一个全局处理异常的Handler

以往我再处理异常时,都会将http的状态码以200返回,先告诉前端请求成功,然后会在多给一个code来表示异常,最近看了挺多资料,像这类的异常直接以Http的Status返回对应的异常码其实是更加清晰的,前端人员在对接时,也不用去过多的理解业务中自定的那堆code,因为HttpStatus是统一的。

这里可以参考 org.springframework.http.HttpStatus 的状态码

以登录授权为例,如果校验不通过时,返回一个401的状态,此时,两端在接口对接和理解上,就能更加的统一

上面的例子在测试之后的到的结果

在浏览器上操作可以看到

此处做个记录,后续业务中,尽量按照统一的标准去实现。 加油~~!

以上是关于使用AOP校验用户登录和异常处理-2020-10-26的主要内容,如果未能解决你的问题,请参考以下文章

通过aop实现rpc统一参数校验&异常捕捉

微服务的用户认证与授权杂谈(下)

Spring Boot 统一功能处理(用户登录权限效验-拦截器异常处理数据格式返回)

非Controller异常处理办法

SpringBoot 统一功能处理

AOP + 注解 实现通用的接口参数校验