iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot统一处理功能实现的全过程
  • 624
分享到

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

SpringBoot统一处理功能SpringBoot统一处理 2023-03-20 11:03:34 624人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录登录校验异常处理原理返回数据结构在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor,实现Ha

在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。

登录校验

可以利用spring mvc的拦截器Interceptor,实现HandlerInterceptor接口即可。实现该接口后,会在把请求发给Controller之前进行拦截处理。

拦截器的实现分为以下两个步骤:

  • 创建⾃定义拦截器,实现 HandlerInterceptor 接⼝的 preHandle(执⾏具体⽅法之前的预处理)⽅法。
  • 将⾃定义拦截器加⼊ WEBMvcConfigurer 的 addInterceptors ⽅法中。

我们使用session来作为登录校验的例子,实现如下:

package com.demo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.Http.httpservletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
     
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 判断session的信息是否合法
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute("userinfo") != null) {
            return true;
        }
        log.error("当前用户没有访问权限");
        response.setStatus(401);
        return false;
    }
}

将写好的⾃定义拦截器通过WebMvcConfigurer注册到容器中,使得拦截器生效,具体实现代码如下:

package com.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorReGIStry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfig implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("
@ControllerAdvice
public class ErrorAdive {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public HashMap<String, Object> exceptionAdvie(Exception e) {
        HashMap<String, Object> result = new HashMap<>();
        result.put("code", "-1");
        result.put("msg", e.getMessage());
        return result;
    }
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public HashMap<String, Object> arithmeticAdvie(ArithmeticException e) {
        HashMap<String, Object> result = new HashMap<>();
        result.put("code", "-2");
        result.put("msg", e.getMessage());
        return result;
    }
}

此时若出现异常就不会报错了,代码会继续执行,但是会把自定义的异常信息返回给前端

原理

@ControllerAdvice是spring的aop对于Controller进行切面所有属性的,包括切入点和需要织入的切面逻辑,配合@ExceptionHandler来捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的。

返回数据结构

统⼀的返回数据结构可以使用 @ControllerAdvice + ResponseBodyAdvice接口 的方式实现,具体实现代码如下:

package com.demo;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyA
dvice;
import java.util.HashMap;

@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {
    
    @Override
    public boolean supports(MethodParameter returnType, Class converterTyp
e) {
        return true;
    }
    
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType,
                                  MediaType selectedContentType,
                                  Class selectedConverterType, ServerHttpR
                                          equest request,
                                  ServerHttpResponse response) {
        // 构造统⼀返回对象
        HashMap<String, Object> result = new HashMap<>();
        result.put("state", 1);
        result.put("msg", "");
        result.put("data", body);
        return result;
    }
}

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

--结束END--

本文标题: SpringBoot统一处理功能实现的全过程

本文链接: https://www.lsjlt.com/news/200496.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot统一功能处理实现的全过程
    目录前言1.用户登录权限效验1.1 Spring AOP 实现用户统一登录验证1.2 Spring 拦截器1.2.1 自定义拦截器1.2.2 将自定义拦截器加入到系统配置1.3 拦截...
    99+
    2023-01-10
    springboot统一功能 springboot 统一
  • SpringBoot统一处理功能实现的全过程
    目录登录校验异常处理原理返回数据结构在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor,实现Ha...
    99+
    2023-03-20
    SpringBoot统一处理功能 SpringBoot统一处理
  • SpringBoot统一处理功能如何实现
    本文小编为大家详细介绍“SpringBoot统一处理功能如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot统一处理功能如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在处理网络请求...
    99+
    2023-07-05
  • SpringBoot统一功能处理
    前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 本章是讲Spring Bo...
    99+
    2023-09-03
    spring boot java 后端
  • SpringBoot中的统一功能处理怎么实现
    本篇内容介绍了“SpringBoot中的统一功能处理怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、用户登录权限效验⽤户登录权限的...
    99+
    2023-07-06
  • SpringBoot中的统一功能处理如何实现
    本篇内容介绍了“SpringBoot中的统一功能处理如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、用户登录权限效验⽤户登录权限的...
    99+
    2023-07-05
  • 详解SpringBoot中的统一功能处理的实现
    目录前言一、用户登录权限效验1.1 最初的用户登录验证1.2 Spring AOP 用户统一登录验证的问题1.3 Spring 拦截器1.4 拦截器实现原理1.5 扩展:统一访问前缀...
    99+
    2023-01-28
    SpringBoot统一功能处理 SpringBoot统一功能 SpringBoot统一处理
  • elementUI+Springboot实现导出excel功能的全过程
    目录前言步骤依赖包element表格table引入包编写方法完整实例最终导出结果结语前言 在前面,我们其实已经完成了elementUI+springboot的导入功能springbo...
    99+
    2022-11-13
  • SpringBoot实现功能的统一详解
    目录1. 统一用户登录权限验证1.1 自定义拦截器1.2 将自定义拦截器加入到系统配置1.3 运行结果1.4 总结2. 统一异常处理2.1 代码实现2.2 运行结果3. 统一数据返回...
    99+
    2022-11-13
  • SpringBoot实现文件在线预览功能的全过程
    目录背景系统设计文件类型及方案流程设计系统实现识别文件后缀文件解析系统效果使用方法项目源码地址预览界面总结背景 最近公司内部oa系统升级,需要增加文件在线预览服务,最常见的文件就是...
    99+
    2022-11-12
  • SpringBoot统一功能处理的方式详解
    目录SpringMVC统一处理的三种方式1、基于SpringMVC的配置类扩展2、统一的响应数据格式封装3、统一异常处理基于SpringAOP已经实现统一功能增强,但如果希望对Con...
    99+
    2022-11-13
    SpringBoot统一功能处理 SpringBoot统一处理 SpringBoot统一处理方式
  • Python实现一键抠图功能的全过程
    本篇内容主要讲解“Python实现一键抠图功能的全过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python实现一键抠图功能的全过程”吧!简介使用百度深度学习框架paddlepaddle对人...
    99+
    2023-06-20
  • Python快速实现一键抠图功能的全过程
    简介 使用百度深度学习框架paddlepaddle对人像图片进行自动化抠图 安装 根据PaddlePaddle官网命令安装 如 pip install paddlepaddle...
    99+
    2022-11-12
  • SpringBoot如何实现统一异常处理
    这篇文章将为大家详细讲解有关SpringBoot如何实现统一异常处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.介绍在日常开发中发生了异常,往往是需要通过一个统一的异常处理处理所有异常...
    99+
    2023-05-31
    springboot 统一异常 异常处理
  • uniapp实现上拉加载更多功能的全过程
    目录一、添加全部1.在主页面中添加一列2.改云函数3.插件市场导入 加载中组件二、实现上拉加载1.云函数中可以接收参数2.获取下拉事件3.写触发这个下拉干嘛总结一、添加全部 1.在主...
    99+
    2022-11-13
    uniapp实现上拉加载更多 uniapp下拉加载更多 uniapp实现上拉加载更多
  • vue实现滑块拖拽校验功能的全过程
    效果图 定义骨架,写html和css html部分 <template> <div class="drag-wrapper" ref="dragDi...
    99+
    2022-11-12
  • SpringBoot实现文件在线预览功能的过程是怎样的
    SpringBoot实现文件在线预览功能的过程是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。背景最近公司内部oa系统升级,需要增加文件在线预览服务,最常见的文件就是of...
    99+
    2023-06-25
  • 非常全面的Java SpringBoot点赞功能实现
    目录前言解决方案青铜版白银版黄金版源码总结前言 最近公司在做一个NFT商城的项目,大致就是一个只买卖数字产品的平台,项目中有个需求是用户可以给商品点赞,还需要获取商品的点赞总数,类似...
    99+
    2022-11-13
  • Springboot实现VNC的反向代理功能
    背景 ​ 用户需要通过前端HTML页面的noVNC(noVNC是什么?)客户端连接底层VNC Server服务端,为了防止VNC Server的IP暴露,因此需要做一层代...
    99+
    2022-11-12
  • springboot 全局异常处理和统一响应对象的处理方式
    目录springboot异常处理SpringBoot 默认的异常处理机制SpringBoot 全局异常处理1. 局部异常处理2. 全局异常处理自定义异常统一响应对象定义统一的响应对象...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作