【个人博客系统网站】统一处理 · 拦截器
【JavaEE】进阶 · 个人博客系统(2)
文章目录
- 【JavaEE】进阶 · 个人博客系统(2)
- 1. 统一返回格式处理
- 1.1 统一返回类common.CommonResult
- 1.2 统一返回处理器component.ResponseAdvice
- 2. 统一异常处理
- 3. 拦截器实现
- 3.1 全局变量SESSION_KEY
- 3.2 session工具类SessionUtils
- 3.3 拦截器 UserInterceptor
- 3.4 配置类 AppConfig
【JavaEE】进阶 · 个人博客系统(2)
【JavaEE】Spring全家桶实现AOP-统一处理_s:103的博客-CSDN博客
为了让代码更加低耦合,高内聚,符合单一设计原则,所以进行一些统一处理!
1. 统一返回格式处理
1.1 统一返回类common.CommonResult
@Data
public class CommonResult {private int code; //状态码private String msg; //状态码描述信息private Object data; //返回数据public static CommonResult success(Object data) {CommonResult result = new CommonResult();result.setCode(200);result.setMsg("成功");result.setData(data);return result;}public static CommonResult success(Object data, String msg) {CommonResult result = new CommonResult();result.setCode(200);result.setMsg(msg);result.setData(data);return result;}public static CommonResult fail(int code, String msg) {CommonResult result = new CommonResult();result.setCode(code);result.setMsg(msg);return result;}public static CommonResult fail(int code, String msg, Object data) {CommonResult result = new CommonResult();result.setCode(code);result.setMsg(msg);result.setData(data);return result;}}
1.2 统一返回处理器component.ResponseAdvice
@ControllerAdvice
@ResponseBody
public class ResponseAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;//我要重写~}@Autowiredprivate ObjectMapper objectMapper;//Spring中自带了个 Bean是 ObjectMapper,所以可以注入@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType,ServerHttpRequest request, ServerHttpResponse response) {if(body instanceof Result) {//body 有 Result对象向上转型而来(已经包装好了的)~return body;}if(body instanceof String) {try {return objectMapper.writeValueAsString(Result.success(body));} catch (JsonProcessingException e) {e.printStackTrace();}}return Result.success(body);}
}
当然,统一返回处理,一般针对的是(百密一疏的缺漏情况),controller里的接口mapping中,没有使用CommonResult类的包装方法的mapping,即默认的一个返回处理,而 平常我们写的时候,都是自己调用CommonResult类的包装方法 ~
- String类型进行统一返回,响应的类型还是text/html,所以前端得手动将json字符串转化为json对象,
jQuery.parseJSON() - 如果手动调用了CommonResult类的包装方法,则没有这个问题,因为接口方法的返回值是非String类型,默认是json
2. 统一异常处理
@RestControllerAdvice
public class ExceptionAdvice {@ExceptionHandler(Exception.class)public Object exceptionAdvice(Exception e) {return CommonResult.fail(-1, e.getMessage());}
}

3. 拦截器实现
3.1 全局变量SESSION_KEY

3.2 session工具类SessionUtils
通过这个工具类,我们可以调用一个方法去获取当前登录用户:
public class SessionUtils {/*** 得到当前登录用户* @param request* @return*/public static UserInfo getUser(HttpServletRequest request) {HttpSession session = request.getSession(false);return session == null ? null : (UserInfo) session.getAttribute(ApplicationVariable.SESSION_KEY);}
}
3.3 拦截器 UserInterceptor
@Component
public class UserInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("执行了拦截器!");//业务逻辑if (SessionUtils.getUser(request) != null) {return true;//用户登录}response.sendRedirect("blog_login.html");return false;}
}
3.4 配置类 AppConfig
@Configuration//不是Configurable!
public class AppConfig implements WebMvcConfigurer {@Autowiredprivate UserInterceptor userInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(userInterceptor).addPathPatterns("/**").excludePathPatterns("/blog_login.html").excludePathPatterns("blog_detail.html").excludePathPatterns("blog_register.html").excludePathPatterns("blog_lists.html").excludePathPatterns("/css/**").excludePathPatterns("/editor.md").excludePathPatterns("/img/**").excludePathPatterns("/js/**").excludePathPatterns("/sql/**");}
}
随着功能的实现,根据业务逻辑,判断其是否要进行排除!目前仅仅将一些静态资源排除~

文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆!代码:myblog_system · 游离态/马拉圈2023年9月 - 码云 - 开源中国 (gitee.com)
相关文章:
【个人博客系统网站】统一处理 · 拦截器
【JavaEE】进阶 个人博客系统(2) 文章目录 【JavaEE】进阶 个人博客系统(2)1. 统一返回格式处理1.1 统一返回类common.CommonResult1.2 统一返回处理器component.ResponseAdvice 2. 统一异常处理3. 拦截器实现3.1 全局变量SESSI…...
深入探索PHP编程:文件操作与输入/输出(I/O)
深入探索PHP编程:文件操作与输入/输出(I/O) 在PHP编程中,文件操作和输入/输出(I/O)是不可或缺的关键部分。无论是读取、写入文件,还是处理上传的文件,这些操作都是Web开发的重要组成…...
基于jeecg-boot的flowable流程自定义业务驳回到发起人的一种处理方式
有些粉丝,希望对自定义业务中,驳回到发起人进行处理,比如可以重新进行发起流程,下面就给出一种方式,当然不一定是最好的方式,只是提供一种参考而已,以后可以考虑动态根据流程状态或节点信息进行…...
【大数据知识】大数据平台和数据中台的定义、区别以及联系
数据行业有太多数据名词,例如大数据、大数据平台、数据中台、数据仓库等等。但大家很容易混淆,也很容易产生疑问,今天我们就来简单聊聊大数据平台和数据中台的定义、区别以及联系。 大数据平台和数据中台的定义 大数据平台:一个…...
华为OD:IPv4地址转换成整数
题目描述: 存在一种虚拟IPv4地址,由4小节组成,每节的范围为0-255,以#号间隔,虚拟IPv4地址可以转换为一个32位的整数,例如: 128#0#255#255,转换为32位整数的结果为2147549183&#…...
2023.9 - java - 浅拷贝
与 js的浅拷贝不同: 在 JavaScript 中, Object.assign() 或 spread 运算符等方法可以实现浅拷贝,但只针对对象的第一层属性进行复制。如果一个对象只包含基本数据类型的属性,那么对浅拷贝出来的对象进行修改不会影响原始对象&…...
STM32f103入门(10)ADC模数转换器
ADC模数转换器 ADC简介AD单通道初始化代码编写第一步开启时钟第二步 RCCCLK分频 6分频 72M/612M第三步 配置GPIO 配置为AIN状态第四步,选择规则组的输入通道第五步 用结构体 初始化ADC第六步 对ADC进行校准编写获取电压函数初始化代码如下 Main函数编写 ADC简介 ADC…...
实训笔记8.28
实训笔记8.28 8.28笔记一、大数据计算场景主要分为两种1.1 离线计算场景1.2 实时计算场景 二、一般情况下大数据项目的开发流程2.1 数据采集存储阶段2.2 数据清洗预处理阶段2.3 数据统计分析阶段2.4 数据挖掘预测阶段2.5 数据迁移阶段2.6 数据可视化阶段 三、纯大数据离线计算项…...
机器学习笔记之最优化理论与方法(五)凸优化问题(上)
机器学习笔记之最优化理论与方法——凸优化问题[上] 引言凸优化问题的基本定义凸优化定义:示例 凸优化与非凸优化问题的区分局部最优解即全局最优解凸优化问题的最优性条件几种特殊凸问题的最优性条件无约束凸优化等式约束凸优化非负约束凸优化 引言 本节将介绍凸优…...
在Windows10上编译grpc工程,得到protoc.exe和grpc_cpp_plugin.exe
grpc是google于2015年发布的一款跨进程、跨语言、开源的RPC(远程过程调用)技术。使用C/S模式,在客户端、服务端共享一个protobuf二进制数据。在点对点通信、微服务、跨语言通信等领域应用很广,下面介绍grpc在windows10上编译,这里以编译grpc …...
一些测试知识
希望能起到帮助,博主主页: https://blog.csdn.net/qq_57785602/category_12023254.html?spm1001.2014.3001.5482 软件测试理论 测试的依据: 需求,规格说明,模型,用户需求等 什么是软件测试 描述一种来…...
Socket交互的基本流程?
TCP socket通信过程图 什么是网络编程,网络编程就是编写程序使两台连联网的计算机相互交换数据。怎么交换数据呢?操作系统提供了“套接字”(socket)的组件我们基于这个组件进行网络通信开发。tcp套接字工作流程都以“打电话”来生…...
css 分割线中间带文字
效果图 代码块(自适应) <div class"line"><span class"text">我是文字</span></div>.line{height:0;border-top:1px solid #000;text-align:center;}.text{position:relative;top:-14px;background-color:#…...
会不会激发对modern c++的新兴趣
可变参数好像很厉害的样子,会节省很多手写代码,让编译器自动帮我们生成代码 template<typename Fun, typename...Args> void invoke(Fun&& fun, Args&&...args) { fun(std::forward<Args>(args)...); } 任意函数包装器…...
Nginx服务器如何配合Java开发项目
Nginx服务器如何才能配合好相关的编程语言进行服务器搭建呢?下面我们就来看看有关的技术如何融合。希望大家有所收获。 在进行Nginx服务器建设的时候有很多语言的应用,其中Java 开发的web项目就是很常见的。下面我们就看看Nginx服务器如何才能与Java编程…...
【LeetCode-中等题】994. 腐烂的橘子
文章目录 题目方法一:bfs层序遍历 题目 该题值推荐用bfs,因为是一层一层的感染,而不是一条线走到底的那种,所以深度优先搜索不适合 方法一:bfs层序遍历 广度优先搜索,就是从起点出发,每次都尝…...
K8s部署单机mysql
文章目录 一、K8s部署单机mysql1.1 说明1.2 不足 二、部署三、检查 一、K8s部署单机mysql 1.1 说明 定制配置数据存放在configMapmysql数据放在/opt/mysql目录下(/opt/mysql目录需要事先创建)root账号密码使用环境变量env服务暴露方式为nodePort,端口30336 1.2 不…...
Midjourney学习(二)参数的基础
prompt的组成 prompt 可以由三部分组成, 第一部分是垫图部分,也就是一张网络图片 第二部分是文本描述内容 第三部分则是参数 参数列表 --aspect <value> 或者 --ar <value> 控制画面的比例,横竖比例 --version <value> -…...
Ubuntu安装Protobuf,指定版本
参考:https://github.com/protocolbuffers/protobuf#readme https://github.com/protocolbuffers/protobuf/blob/v3.20.3/src/README.md 其实官网的readme给的步骤很详细。 1.安装相关依赖 sudo apt-get install autoconf automake libtool curl make g unzip …...
没有使用sniffer dongle在windows抓包蓝牙方法分享
网上很多文章都是介绍买一个sniffer dongle来抓蓝牙数据,嫌麻烦又费钱,目前找到一个好方法,不需要sniffer就可以抓蓝牙数据过程,现分享如下: (1)在我资源附件找到相关安装包或者查看如下链接 https://learn.microsoft.com/zh-cn/windows-hardware/drivers/bluetooth/testing-bt…...
全民拼购的“低门槛+全权益”,到底戳中了商业的哪个命门
一、先给全民拼购画个像:不是“割韭菜”,是“普惠式信任游戏”老陈一开始也怕:“拼购不都是‘砍一刀免费拿’‘拉3人返现’吗?我可不想踩红线。”我跟他说:新型全民拼购和传统拼购的本质区别,是“从‘赚快钱…...
别再手动画流程图了!用Flowable 6.8.1 + SpringBoot 3分钟搞定请假审批系统
3分钟集成Flowable 6.8.1:SpringBoot请假审批系统实战指南 当团队需要快速上线一个请假审批模块时,传统开发方式往往需要编写大量状态流转代码。去年我们团队就遇到过这种情况——产品经理突然要求三天内上线OA系统的请假功能,而当时我们连数…...
Nomic-Embed-Text-V2-MoE部署排错指南:解决403 Forbidden等常见API访问错误
Nomic-Embed-Text-V2-MoE部署排错指南:解决403 Forbidden等常见API访问错误 部署一个新的模型服务,就像给家里添置一台新电器,插上电、打开开关,本以为就能顺利运转,结果却发现指示灯不亮,或者干脆跳闸了。…...
Codeforces Round 1082 (Div. 2)2202
Submission #368219050 - Codeforces A. Parkour Design 思路:第一个操作第三个操作两步第二个操作,所以实际上只需要考虑y坐标的变化,然后看一下x的差值是否能整除3就可以了 B. ABAB Construction 思路:奇数长度开头一定是a或者…...
Unity Tilemap瓦片动态缩放:保持网格尺寸不变的核心技巧
1. 为什么需要动态缩放Tilemap瓦片? 在开发2D游戏时,Tilemap是最常用的地图构建工具之一。比如制作一个棋盘游戏,每个格子大小固定为64x64像素,但随着关卡难度提升,我们希望棋子能动态缩小显示,而格子本身尺…...
手把手教你:FinalShell控制台背景图片自定义替换(无需VIP权限)
1. 为什么需要自定义FinalShell控制台背景? 作为一个每天要和命令行打交道的开发者,我深知一个舒适的开发环境有多重要。FinalShell作为国产SSH客户端的佼佼者,默认的深色背景虽然专业,但看久了难免单调。你可能不知道࿰…...
华为S5700交换机Combo口配置踩坑实录:从光口不亮到链路闪断,我的排错全记录
华为S5700交换机Combo口故障排查手记:一位工程师的深夜排错实录 凌晨2:15,监控系统刺耳的告警声把我从半梦半醒中彻底拽了出来。核心交换机与接入层之间的GigabitEthernet 1/0/5接口状态像霓虹灯一样在UP/DOWN之间疯狂切换——这已经是本周第三次了。作为…...
AI转PSD终极指南:快速实现矢量图到Photoshop分层文件的完美转换
AI转PSD终极指南:快速实现矢量图到Photoshop分层文件的完美转换 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 还在为Illustrato…...
反激电源设计避坑:空载炸管、RCD吸收烧电阻?聊聊DCM模式下那些容易忽略的细节
反激电源实战陷阱解析:从空载炸管到RCD失效的深度拆解 实验室里弥漫着焦糊味,示波器上那条本该稳定的波形突然飙升——这可能是每个电源工程师都经历过的噩梦时刻。反激拓扑看似简单,但当你的设计从仿真进入实测阶段,各种"幽…...
如何通过Superalgos教育模块快速掌握算法交易:新手入门完整指南
如何通过Superalgos教育模块快速掌握算法交易:新手入门完整指南 【免费下载链接】Superalgos Superalgos/Superalgos: 是一个开源的分布式社交网络分析和数据挖掘平台。适合对大数据分析、机器学习、区块链以及分布式系统有兴趣的开发者。 项目地址: https://gitc…...

