【个人博客系统网站】统一处理 · 拦截器

【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)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/65950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kitchen Hook

双扛厨房排钩:挂刀具

低代码赋能| 绿色智慧矿山解决方案

在世界能源日趋紧张的背景下,能源产业的数字化升级是大势所趋。矿山行业作为国家能源安全的“压舱石”,也必须进行产业升级。一直以来,国家都在大力推动智慧矿山建设。通过大数据、GIS、物联网、云计算、人工智能等新兴技术,实现矿…

Swift 技术 视频播放器滚动条(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…

云计算 - 百度AIStudio使用小结

云计算 - 百度AIStudio使用小结 前言 本文以ffmpeg处理视频为例,小结一下AI Studio的使用体验及一些避坑技巧。 算力获得 免费的算力获得方式为:每日登录后运行一个项目(只需要点击运行,不需要真正运行)即可获得8小…

深入理解 JVM 之——动手编译 JDK

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 本篇为深入理解 Java 虚拟机第一章的实战内容,推荐在学习前先掌握基础的 Linux 操作、编译原理基础以及扎实的 C/C 功底。 该系列的 GitHub 仓库:https://github.com/Doge2077/lear…

Python爬虫网络安全:优劣势和适用范围分析

目录 优势和劣势 优势: 劣势: 适用范围: 1. 网页数据收集和分析: 2. 漏洞扫描和安全评估: 3. 威胁情报收集: 4. 社交媒体监测和情感分析: 注意事项 1. 合规性和法律规定: …

VB.NET 如何将某个Excel的工作表中复制到另一个的Excel中的工作表中https://bbs.csdn.net/topics/392861034

参考http://share.freesion.com/306372/可以实现直接拷贝指定表 Private Sub Excel复制工作簿()Dim myExcelApp As New Microsoft.Office.Interop.Excel.ApplicationmyExcelApp.Workbooks.Open(System.Environment.CurrentDirectory "\\测试用例.xlsx", Type.Missin…

深入浅出理解Allan方差分析方法

一、参考资料 深入浅出理解卡尔曼滤波 二、Allan方差分析方法 1. 引言 传统的误差指标往往是采用均值误差(反映整个误差序列有无宏观偏置)、标准差(反映整个误差序列的波动情况),以及均方根(RMS&#x…

怎样来实现流量削峰方案

削峰从本质上来说就是更多地延缓用户请求,以及层层过滤用户的访问需求,遵从“最后落地到数据库的请求数要尽量少”的原则。 1.消息队列解决削峰 要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直…

uview ui 1.x ActonSheet项太多,设置滚动(亲测有效)

问题:ActionSheet滚动不了。 使用uview ui :u-action-sheet, 但是item太多,超出屏幕了, 查了一下文档,并没有设置滚动的地方。 官方文档:ActionSheet 操作菜单 | uView - 多平台快速开发的UI框架 - uni-a…

Spring Cloud--从零开始搭建微服务基础环境【三】

😀前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【三】,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,…

使用Fiddler模拟网络

Fiddler已经预置提供了模拟Modem速度的选项,其位置位于: Rules->Performances->Simulate Modem Speeds 勾选该选项后,所有通过Fiddler代理的流量都会变得用56k modem上网一般。 要直观观察限速后的效果,最好使用运行在浏览…

Linux用一键安装包部署禅道(18.5版本)

一、安装 禅道软件下载地址:禅道官方下载地址 - 禅道开源项目管理软件 - 禅道开源项目管理软件 请根据自己的需要下载对应的版本。 官方教程地址: (推荐)Linux用一键安装包 - 禅道使用手册 - 禅道开源项目管理软件 注:Linux 一键安装包必须直接解压到 …

2023-9-3 分解质因数

题目链接&#xff1a;分解质因数 #include <iostream>using namespace std;void divide(int n) {for(int i 2; i < n / i; i ){if(n % i 0){int res 0;while(n % i 0){n / i;res ;}cout << i << << res << endl;}}if(n > 1) cout &l…

linux 内存一致性

linux 出现内存一致性的场景 1、编译器优化 &#xff0c;代码上下没有关联的时候&#xff0c;因为编译优化&#xff0c;会有执行执行顺序不一致的问题&#xff08;多核单核都会出现&#xff09; 2、多核cpu乱序执行&#xff0c;cpu的乱序执行导致内存不一致&#xff08;多核出…

匠心新品:大彩科技超薄7寸WIFI线控器发布,热泵、温控器、智能家电首选!

一、产品介绍 此次发布一款7寸高清全新外壳产品&#xff0c;让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动&#xff1a; 1 表面玻璃盖板使用2.5D立体结构&#xff1b; 2 液晶盖板采用一体黑设计&#xff0c;且液晶屏与触摸板是全贴合结构&#xff1b; …

卡片介绍、EMV卡组织、金融认证---安全行业基础篇2

一、卡片介绍 卡片是一种用于存储和传输数据的可携带式物品&#xff0c;通常由塑料或纸质材料制成。卡片通常具有特定的尺寸和形状&#xff0c;以适应各类读写设备。不同类型的卡片可以用于不同的应用&#xff0c;如身份验证、支付、门禁控制等。 接触卡 接触卡是一种需要与读…

SpringBoot 整合 RabbitMQ

1. 创建 SpringBoot 工程 把版本改为 2.7.14 引入这两个依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springfr…

【高效编程技巧】编程菜鸟和编程大佬的差距究竟在哪里?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《高效编程技巧》《C语言进阶》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言1.如何写出好的代码&#xff1f;1.2 如何分析一个函数写的怎么样 2. 代码板式的重要性2.1 代码…

C#---第21: partial修饰类的特性及应用

0.知识背景 局部类型适用于以下情况&#xff1a; 类型特别大&#xff0c;不宜放在一个文件中实现。一个类型中的一部分代码为自动化工具生成的代码&#xff0c;不宜与我们自己编写的代码混合在一起。需要多人合作编写一个类 局部类型的限制: 局部类型只适用于类、接口、结构&am…