SpringBoot统一功能处理实现的全过程

 更新时间:2023年01月10日 10:44:51   作者:如风暖阳  
最近在做项目时需要对异常进行全局统一处理,主要是一些分类入库以及记录日志等,下面这篇文章主要给大家介绍了关于SpringBoot统一功能处理实现的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下

前言

这篇文章主要介绍Spring Boot的统一功能处理模块,也是AOP的实战环节。

1.用户登录权限效验

在学习Spring AOP之前,用户登录权限的验证是由每个方法中自己验证。

1.1 Spring AOP 实现用户统一登录验证

而学习了Spring AOP之后,可以通过Spring AOP的前置通知环绕通知来实现,具体实现代码如下:

但如果在以上Spring AOP的切面中实现用户权限效验的功能,有以下两个问题:

1.没办法获取到HttpSession对象。

2.我们要对一部分方法进行拦截,而另一部分方法不拦截,如注册方法和登录方法是不拦截的,这样的话排除方法的规则很难定义,甚至没办法定义。

要解决上述问题,就需要使用下边的Spring拦截器:

1.2 Spring 拦截器

对于以上问题Spring中提供了具体的实现拦截器:HandlerInterceptor,拦截器的实现分为以下两个步骤:

1、创建自定义拦截器,实现 HandlerInterceptor 接口的perHandle(执行具体方法之前的预处理)方法。

2、将自定义拦截器加入 WebMvcConfigeraddInterceptors方法中。

具体实现如下:

1.2.1 自定义拦截器

自定义拦截器是一个普通类,具体实现代码如下:

1.2.2 将自定义拦截器加入到系统配置

将上一步中的自定义拦截器加入到系统配置信息中,具体实现代码如下:

其中:

  • addPathPatterns:表示需要拦截的URL,**表示拦截任意方法(也就是所有方法)
  • excludePathPatterns:表示需要排除的URL。

说明:以上拦截规则可以拦截此项目中使用的URL,包括静态文件(图片文件、JS和CSS等文件)。

1.3 拦截器实现原理

在用户调用Controller的方法之前,拦截器进行预处理,符合条件才会进一步调用Controller层的方法。

2.统一异常处理

在我们的程序出错时,前端可能根本不知道是由于什么原因,而导致程序不能正常运行,所以我们就需要通过统一异常的处理方式,使得前端获取到程序异常的具体原因,进而使得程序员更好的解决问题。

统一异常处理使用的是@ControllerAdvice+@ExceptionHandler来实现的,@ControllerAdvice表示控制器通知类,@ExceptionHandler是异常处理器,两个结合表示当出现异常的时候执行某个通知,也就是执行某个方法事件,具体实现代码如下:

方法名和返回值可以自定义,其中最重要的是@ExceptionHandler(Exception.class)注解。

以上方法表示,如果出现了异常,就可以返回给前端一个HashMap对象,我们也可以针对不同的异常返回不同的结果具体执行的异常通知符合当前异常向上依次匹配的规则

在浏览器中输入127.0.0.1:8080/user/reg,查看统一异常处理后的执行效果,可以发现,之前返回的是执行了 reg 方法,但现在如果程序再因为异常原因不能正常运行,前端就会获取到异常的原因了。

3.统一数据返回格式

3.1 统一数据返回格式的优点

  • 方便前端程序员更好的接受和解析后端数据接口返回的数据。
  • 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就可以了,因为所有接口都是这样返回的。
  • 有利于项目统一数据的维护和修改。
  • 有利于后端技术部门的统一规范的标准制定,不会出现稀奇古怪的返回内容。

3.2 统一数据返回格式的实现

统一的数据返回格式可以使用@ControllerAdvice+ResponseBodyAdvice的方式实现,具体实现代码如下:

在浏览器输入127.0.0.1:8080/user/login,在统一数据格式之前,前端页面接收到的参数为布尔类型true/false,而现在返回的就是统一格式的数据了。

4.总结

  • 统一用户登录权限的效验使用WebMvcConfigurer+HandlerInterceptor来实现
  • 统一异常处理使用@ControllerAdvice+@ExceptionHandler来实现
  • 统一返回值处理使用@ControllerAdvice+ResponseBodyAdvice来处理

到此这篇关于SpringBoot统一功能处理实现的文章就介绍到这了,更多相关SpringBoot统一功能处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    这篇文章主要介绍了Java线程之锁对象Lock-同步问题更完美的处理方式代码实例,还是挺不错的,这里分享给大家,需要的朋友可以参考。
    2017-11-11
  • Java中HashMap和TreeMap的区别深入理解

    Java中HashMap和TreeMap的区别深入理解

    首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value
    2012-12-12
  • 如何集成swagger2构建Restful API

    如何集成swagger2构建Restful API

    这篇文章主要介绍了如何集成swagger2构建Restful API,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring Boot 2.X快速整合jpa过程解析

    Spring Boot 2.X快速整合jpa过程解析

    这篇文章主要介绍了Spring Boot 2.X 如何快速整合jpa?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 详解Spring框架之基于Restful风格实现的SpringMVC

    详解Spring框架之基于Restful风格实现的SpringMVC

    这篇文章主要介绍了详解Spring框架之基于Restful风格实现的SpringMVC,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java并发编程之CountDownLatch解析

    Java并发编程之CountDownLatch解析

    这篇文章主要介绍了Java并发编程之CountDownLatch解析,Sync为一个实现了AQS的内部类,代理CountDownLatch的获取和释放操作,需要所有线程等待某个条件完成后,才执行某个动作时,可以使用CountDownLatch,需要的朋友可以参考下
    2023-12-12
  • Java I/O (Input/Output)文件字节流举例详解

    Java I/O (Input/Output)文件字节流举例详解

    Java的输入输出流(IO)是用于与外部设备(如文件、网络连接等)进行数据交互的机制,下面这篇文章主要给大家介绍了关于Java I/O (Input/Output)文件字节流的相关资料,需要的朋友可以参考下
    2024-08-08
  • SpringBoot集成Druid监控页面最小化配置操作

    SpringBoot集成Druid监控页面最小化配置操作

    这篇文章主要介绍了SpringBoot集成Druid监控页面最小化配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot项目如何添加2FA双因素身份认证

    SpringBoot项目如何添加2FA双因素身份认证

    双因素身份验证2FA是一种安全系统,要求用户提供两种不同的身份验证方式才能访问某个系统或服务,国内普遍做短信验证码这种的用的比较少,不过在国外的网站中使用双因素身份验证的还是很多的,这篇文章主要介绍了SpringBoot项目如何添加2FA双因素身份认证,需要的朋友参考下
    2024-04-04
  • springBoot整合Eureka启动失败的解决方案

    springBoot整合Eureka启动失败的解决方案

    这篇文章主要介绍了springBoot整合Eureka启动失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论