springboot增加过滤器后中文乱码

news/2024/9/13 20:50:50/ 标签: spring boot, 后端, java

记录一下小问题

java">public class RepeatableHttpServletWrapper extends HttpServletRequestWrapper {private  byte[] body;public RepeatableHttpServletWrapper(HttpServletRequest request) throws IOException  {super(request);request.setCharacterEncoding("UTF-8");BufferedReader reader = request.getReader();try (StringWriter writer = new StringWriter()) {int read;char[] buf = new char[1024];while ((read = reader.read(buf)) != -1) {writer.write(buf, 0, read);}this.body = writer.getBuffer().toString().getBytes(StandardCharsets.UTF_8);}}public String getBody(){return new String(body, StandardCharsets.UTF_8);}@Overridepublic ServletInputStream getInputStream() {final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);return new ServletInputStream() {@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() {return byteArrayInputStream.read();}};}@Overridepublic BufferedReader getReader() {return new BufferedReader(new InputStreamReader(this.getInputStream(), StandardCharsets.UTF_8));}
}
java">public class RepeatableWrapperFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {if (servletRequest.getCharacterEncoding() == null) {servletRequest.setCharacterEncoding("UTF-8");}ServletRequest requestWrapper = null;if(servletRequest instanceof HttpServletRequest) {requestWrapper = new RepeatableHttpServletWrapper((HttpServletRequest) servletRequest);}if(requestWrapper == null) {filterChain.doFilter(servletRequest, servletResponse);} else {filterChain.doFilter(requestWrapper, servletResponse);}}@Overridepublic void destroy() {}
}
java">    @Beanpublic FilterRegistrationBean repeatableWrapperFilter() {FilterRegistrationBean<RepeatableWrapperFilter> registrationBean = new FilterRegistrationBean();registrationBean.setFilter(new RepeatableWrapperFilter());registrationBean.addUrlPatterns("/*");registrationBean.setOrder(1);registrationBean.setAsyncSupported(true);return registrationBean;}
java">public class DataAuthenticationInterceptor implements HandlerInterceptor {private DataAuthenticationService dataAuthenticationService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {RepeatableHttpServletWrapper repeatableRequest = new RepeatableHttpServletWrapper(request);String body = repeatableRequest.getBody();}

之前做的一个功能需要 通过拦截器前置处理post请求中body的信息,由于body在request中是以流存在的,读完就没有了,所以需要增加一个过滤器来进行前置处理,在处理时候本地是正常的发布linux后出现中文乱码情况

方法1:在启动jvm的参数中增加 -Dfile.encoding=UTF-8

java">java -jar -Dfile.encoding=UTF-8 jar包

方法2:在xml文件的build标签中增加 jvm参数处理

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><fork>true</fork><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments></configuration>
</plugin>

方法3:处理读写是统一按照 UTF-8 处理
在这里插入图片描述
方法4: 增加 CharacterEncodingFilter 过滤器 ,这个过滤器优先级要高于新增的过滤器

java">@Bean
public FilterRegistrationBean characterEncodingFilter() {CharacterEncodingFilter filter = new CharacterEncodingFilter();filter.setEncoding("UTF-8");filter.setForceEncoding(true);FilterRegistrationBean<CharacterEncodingFilter> registrationBean = new FilterRegistrationBean();registrationBean.setFilter(filter);registrationBean.addUrlPatterns("/*");registrationBean.setOrder(0);return registrationBean;
}

http://www.ppmy.cn/news/1475242.html

相关文章

物联网可编程中央控制主机

物联网可编程中央控制主机&#xff08;Programmable Central Control Host for IoT&#xff0c;如GF-MAXCC&#xff09;在多个领域都有广泛的应用。这些应用领域包括但不限于&#xff1a; 1. 智能家居 GEFFEN在智能家居系统中&#xff0c;物联网可编程中央控制主机充当着家庭…

批量制作word表格

问题背景 将excel表中的成绩内容制作为成绩单&#xff0c;每页对应一个学员的成绩&#xff0c;方便打印 代码实现 ## 导入包 import pandas as pd from docx import Document from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING# 读取 Excel 内容 df pd.read_e…

巴基斯坦火爆的slots游戏借力Facebook广告获客优势分析

巴基斯坦火爆的slots游戏借力Facebook广告获客优势分析 在巴基斯坦&#xff0c;Slots游戏凭借其独特的魅力和玩法&#xff0c;深受玩家的喜爱。而在众多的推广渠道中&#xff0c;Facebook广告代投凭借其显著的优势&#xff0c;成为了Slots游戏在巴基斯坦市场推广的重要选择。以…

文心一言使用指南

文心一言使用指南 文心一言是百度推出的一款大语言模型&#xff0c;具备跨模态、跨语言的深度语义理解与生成能力。以下是文心一言的详细使用指南&#xff0c;帮助用户快速上手并充分利用其功能。 一、注册与登录 注册账号&#xff1a; 访问文心一言的官方网站或应用商店&am…

稀疏建模介绍,详解机器学习知识

目录 一、什么是机器学习&#xff1f;二、稀疏建模介绍三、Lasso回归简介四、Lasso超参数调整与模型选择 一、什么是机器学习&#xff1f; 机器学习是一种人工智能技术&#xff0c;它使计算机系统能够从数据中学习并做出预测或决策&#xff0c;而无需明确编程。它涉及到使用算…

力扣第226题“翻转二叉树”

在本篇文章中&#xff0c;我们将详细解读力扣第226题“翻转二叉树”。通过学习本篇文章&#xff0c;读者将掌握如何使用递归和迭代的方法来翻转二叉树&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第…

Eureka 介绍与使用

Eureka 是一个开源的服务发现框架&#xff0c;它主要用于在分布式系统中管理和发现服务实例。它由 Netflix 开发并开源&#xff0c;是 Netflix OSS 中的一部分。 使用 Eureka 可以方便地将新的服务实例注册到 Eureka 服务器&#xff0c;并且让其他服务通过 Eureka 服务器来发现…

智能家居开发新进展:乐鑫 ESP-ZeroCode 与亚马逊 ACK for Matter 实现集成

日前&#xff0c;乐鑫 ESP-ZeroCode 与亚马逊 Alexa Connect Kit (ACK) for Matter 实现了集成。这对智能家居设备制造商来说是一项重大进展。开发人员无需编写固件或开发移动应用程序&#xff0c;即可轻松设计符合 Matter 标准的产品。不仅如此&#xff0c;开发者还可以在短短…

grafana数据展示

目录 一、安装步骤 二、如何添加喜欢的界面 三、自动添加注册客户端主机 一、安装步骤 启动成功后 可以查看端口3000是否启动 如果启动了就在浏览器输入IP地址&#xff1a;3000 账号密码默认是admin 然后点击 log in 第一次会让你修改密码 根据自定义密码然后就能登录到界面…

pdf工具

iLovePDF | 为PDF爱好者提供的PDF文件在线处理工具 https://www.ilovepdf.com/zh-cn 图片 pdf 合并成一个pdf也可以拆分

使用引用 XML 文件来优化 EtherCAT ESI 文件的描述

使用引用 XML 文件来优化 EtherCAT ESI 文件的描述 在 EtherCAT 系统中&#xff0c;ESI (EtherCAT Slave Information) 文件是描述 EtherCAT 从设备属性和行为的重要文件。随着系统复杂度的增加&#xff0c;ESI 文件的内容可能会变得非常庞大和冗余。为了优化这些文件&#xf…

美团收银Android一面凉经(2024)

美团收银Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《美团收银Android一面凉经(2024)》。 应聘岗位: 美团餐饮PaaS平台Android开发工程师…

泛微E-Cology WorkflowServiceXml SQL注入漏洞复现

0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 2024年7月,泛微官方发布了新补丁,修复了一处SQL注入漏洞。经分析,攻击者无需认证即可利用该漏洞,建议受影响的客户尽快修复漏洞。…

26.7 Django单表操作

1. 模型管理器 1.1 Manager管理器 Django ORM中, 每个Django模型(Model)至少有一个管理器, 默认的管理器名称为objects. objects是一个非常重要的管理器(Manager)实例, 它提供了与数据库进行交互的接口.通过管理器, 可以执行数据库查询, 保存对象到数据库等操作.objects管理器…

CentOS搭建邮件服务器:DNS配置方法技巧?

CentOS搭建邮件服务器的流程&#xff1f;如何高效使用CentOS&#xff1f; 在当今数字化时代&#xff0c;邮件服务器的需求日益增加。为了确保邮件能够顺利送达&#xff0c;正确的DNS配置是必不可少的一环。AokSend将详细介绍在CentOS搭建邮件服务器过程中&#xff0c;如何进行…

【Stable Diffusion】(基础篇三)—— 关键词和参数设置

提示词和文生图参数设置 本系列笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲…

html高级篇

1.2D转换 转换&#xff08;transform&#xff09;你可以简单理解为变形 移动&#xff1a;translate 旋转&#xff1a;rotate 缩放&#xff1a;sCale 移动&#xff1a;translate 1.移动具体值 /* 移动盒子的位置&#xff1a; 定位 盒子的外边距 2d转换移动 */div {width…

go 密码hash加密包 bcrypt

1.明文密码一般都会通过一套算法转成一条长长的字符串&#xff0c;密码验证这需要通过验证明文和加密字符串是否对应 2.go 有现成的hash算法包 "golang.org/x/crypto/bcrypt" 一般我们有一个工具包utils &#xff0c;在工具里封装两个方法即可&#xff0c; 即 明文…

Studying-代码随想录训练营day33| 动态规划理论基础、509.斐波那契函数、70.爬楼梯、746.使用最小花费爬楼梯

第33天&#xff0c;动态规划开始&#xff0c;新的算法&#x1f4aa;(ง •_•)ง&#xff0c;编程语言&#xff1a;C 目录 动态规划理论基础 动态规划的解题步骤 动态规划包含的问题 动态规划如何debug 509.斐波那契函数 70.爬楼梯 746.使用最小花费爬楼梯 总结 动态…

mysql快速精通(四)多表查询

主打一个实用 一. 连接查询 交叉连接 交叉连接返回两个表的笛卡尔积&#xff0c;即每个表的每一行与另一个表的每一行组合 语法: SELECT *FROM table1 CROSS JOIN table2;内连接 查询两张表都存在的数据&#xff0c;即排除两张表的未匹配部分 语法: SELECT 字段名 FROM 左表 IN…