SpringBoot统一功能处理实现

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

1.用户登录权限效验


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


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


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


微信图片_20230111222545.png

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

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

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


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


1.2 Spring 拦截器


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

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

2、将自定义拦截器加入 WebMvcConfiger的 addInterceptors方法中。


具体实现如下:

微信图片_20230111222537.png


1.2.1 自定义拦截器


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


微信图片_20230111222534.png

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


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


其中:


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

excludePathPatterns:表示需要排除的URL。

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


1.3 拦截器实现原理


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


微信图片_20230111222530.png

2.统一异常处理


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


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


微信图片_20230111222525.png

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


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


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


微信图片_20230111222519.png


3.统一数据返回格式


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


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


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


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


微信图片_20230111222511.png

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


微信图片_20230111222506.png


4.总结


统一用户登录权限的效验使用WebMvcConfigurer+HandlerInterceptor来实现

统一异常处理使用@ControllerAdvice+@ExceptionHandler来实现

统一返回值处理使用@ControllerAdvice+ResponseBodyAdvice来处理


相关文章
|
1月前
|
JavaScript 前端开发 Java
基于SpringBoot+Vue实现前后端交互功能(详解Vue框架机制)
基于SpringBoot+Vue实现前后端交互功能(详解Vue框架机制)
|
2月前
|
存储 Java 数据库
|
2月前
|
存储 搜索推荐 Java
|
2月前
|
缓存 前端开发 Java
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
39 1
|
1月前
|
Java 测试技术 数据库
基于SpringBoot+HTML实现登录注册功能模块
基于SpringBoot+HTML实现登录注册功能模块
|
1月前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
17 0
|
2月前
|
前端开发 关系型数据库 MySQL
springboot+jpa+tymeleaf实现分页功能
springboot+jpa+tymeleaf实现分页功能
12 0
|
2月前
|
存储 JavaScript 前端开发
Spring Boot + Vue: 实现文件导入导出功能
本文介绍了使用Spring Boot和Vue实现文件导入导出的步骤。在后端,Spring Boot通过`MultipartFile`接收上传文件,保存至服务器,并使用`ResponseEntity`提供文件下载。前端部分,Vue项目借助`axios`发送HTTP请求,实现文件选择、上传及下载功能。这种前后端分离的实现方式提高了应用的可维护性和可扩展性。
45 2
|
2月前
|
缓存 NoSQL Java
spring cache整合redis实现springboot项目中的缓存功能
spring cache整合redis实现springboot项目中的缓存功能
50 1
|
2月前
|
前端开发 Java
springboot项目中外卖用户下单业务功能之需求分析+数据模型+功能开发(详细步骤)
springboot项目中外卖用户下单业务功能之需求分析+数据模型+功能开发(详细步骤)
41 0