最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot Filter修改返回內(nèi)容,解決請(qǐng)求卡死200的錯(cuò)誤

 更新時(shí)間:2023年07月19日 10:25:35   作者:Meta39  
這篇文章主要介紹了SpringBoot Filter修改返回內(nèi)容,解決請(qǐng)求卡死200的錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot Filter修改返回內(nèi)容,解決請(qǐng)求卡死200

Filter

import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
/**
?* 過濾器
?*/
@Component
@WebFilter(urlPatterns = "/*", filterName = "testFilter")
public class TestFilter implements Filter {
? ? @Override
? ? public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
? ? ? ? HSRW hsrw = new HSRW((HttpServletResponse) response);//獲取返回內(nèi)容
? ? ? ? filterChain.doFilter(request, hsrw);//一定要放到獲取內(nèi)容前面,否則會(huì)沒有數(shù)據(jù)
? ? ? ? byte[] content = hsrw.getContent();//response流的內(nèi)容
? ? ? ? String str = new String(content, StandardCharsets.UTF_8);
? ? ? ? System.out.println("原返回值:" + str);
?? ??? ?String newStr = "哈哈哈哈哈哈";
? ? ? ? //修改返回內(nèi)容長(zhǎng)度,解決返回內(nèi)容長(zhǎng)度不一致導(dǎo)致請(qǐng)求卡住的問題
? ? ? ? response.setContentLength(newStr.getBytes(StandardCharsets.UTF_8).length);//這里要注意:setContentLength(字符串的字節(jié)長(zhǎng)度,不是字符串的長(zhǎng)度)
? ? ? ? //修改完寫入輸出流,返回給前端
? ? ? ? //JDK8寫法
? ? ? ? try (ServletOutputStream out = response.getOutputStream()) {
? ? ? ? ? ? out.write(newStr.getBytes(StandardCharsets.UTF_8));//寫入返回內(nèi)容
? ? ? ? ? ? out.flush();//刷新
? ? ? ? }
? ? ? ? //JDK8之前的寫法
? ? ? ? /*ServletOutputStream out = response.getOutputStream();
? ? ? ? out.write(newStr.getBytes(StandardCharsets.UTF_8));//寫入返回內(nèi)容
? ? ? ? out.flush();//刷新
? ? ? ? out.close();//關(guān)閉流*/
? ? }
}

繼承HttpServletResponseWrapper重寫方法獲取返回內(nèi)容

import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.*;
public class HSRW extends HttpServletResponseWrapper {
? ? private final ByteArrayOutputStream buffer;
? ? private final ServletOutputStream out;
? ? public HSRW(HttpServletResponse httpServletResponse) {
? ? ? ? super(httpServletResponse);
? ? ? ? buffer = new ByteArrayOutputStream();
? ? ? ? out = new WrapperOutputStream(buffer);
? ? }
? ? @Override
? ? public ServletOutputStream getOutputStream() {
? ? ? ? return out;
? ? }
? ? @Override
? ? public void flushBuffer() throws IOException {
? ? ? ? if (out != null) {
? ? ? ? ? ? out.flush();
? ? ? ? }
? ? }
? ? public byte[] getContent() throws IOException {
? ? ? ? flushBuffer();
? ? ? ? return buffer.toByteArray();
? ? }
? ? static class WrapperOutputStream extends ServletOutputStream {
? ? ? ? private final ByteArrayOutputStream bos;
? ? ? ? public WrapperOutputStream(ByteArrayOutputStream bos) {
? ? ? ? ? ? this.bos = bos;
? ? ? ? }
? ? ? ? @Override
? ? ? ? public void write(int b) {
? ? ? ? ? ? bos.write(b);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public boolean isReady() {
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? @Override
? ? ? ? public void setWriteListener(WriteListener arg0) {
? ? ? ? }
? ? }
}

測(cè)試

沒修改前

Meta,你好!

修改后

哈哈哈哈哈哈

  • 修改完內(nèi)容卡200是因?yàn)闆]有重新設(shè)置內(nèi)容長(zhǎng)度
  • 修改完內(nèi)容返回中文亂碼問題,其實(shí)不是亂碼問題是你設(shè)置的長(zhǎng)度不是字符串的字節(jié)長(zhǎng)度導(dǎo)致的。改成字符串的字節(jié)長(zhǎng)度即可。
  • 沒有數(shù)據(jù)可能是filterChain.doFilter(request, hsrw);位置放錯(cuò)了,要放到獲取內(nèi)容之前,如果放到獲取內(nèi)容之后,則相當(dāng)于獲取的內(nèi)容為空

SpringBoot使用過濾器Filter,修改返回值會(huì)出現(xiàn)返回值截?cái)嗳笔?/h2>

問題原因

原本的ServletResponse response中Content長(zhǎng)度小于修改的長(zhǎng)度。

當(dāng)使用ServletOutputStream out修改返回值的時(shí)候,超過原Content長(zhǎng)度的部分會(huì)被截?cái)?/p>

解決方法

是在將新內(nèi)容寫入前改變Content的長(zhǎng)度:

response.setContentLength(strChange.length());
ServletOutputStream out = response.getOutputStream();
out.write(strChange.getBytes());
out.flush();

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用

    Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用

    Spring?Boot2.6.0為我們帶來很多好用的新特性/改進(jìn),這篇文章主要給大家介紹了關(guān)于Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Java構(gòu)建乘積數(shù)組的方法

    Java構(gòu)建乘積數(shù)組的方法

    這篇文章主要為大家詳細(xì)介紹了Java構(gòu)建乘積數(shù)組的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • java字符串與格式化輸出的深入分析

    java字符串與格式化輸出的深入分析

    本篇文章是對(duì)java字符串與格式化輸出進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • springMVC利用FastJson接口返回json數(shù)據(jù)相關(guān)配置詳解

    springMVC利用FastJson接口返回json數(shù)據(jù)相關(guān)配置詳解

    本篇文章主要介紹了springMVC利用FastJson接口返回json數(shù)據(jù)相關(guān)配置詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java實(shí)現(xiàn)Word、Excel、PDF文件在線預(yù)覽幾種實(shí)現(xiàn)方式

    Java實(shí)現(xiàn)Word、Excel、PDF文件在線預(yù)覽幾種實(shí)現(xiàn)方式

    在Web開發(fā)中,經(jīng)常需要實(shí)現(xiàn)文件的在線預(yù)覽功能,比如預(yù)覽PDF、Word、Excel等文檔格式,這篇文章主要介紹了Java實(shí)現(xiàn)Word、Excel、PDF文件在線預(yù)覽幾種實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下
    2025-12-12
  • 淺談Java安全編碼之文件和共享目錄的安全性

    淺談Java安全編碼之文件和共享目錄的安全性

    Java程序是跨平臺(tái)的,可以運(yùn)行在windows也可以運(yùn)行在linux。但是平臺(tái)不同,平臺(tái)中的文件權(quán)限也是不同的。windows大家經(jīng)常使用,并且是可視化的權(quán)限管理,這里就不多講了。本文主要講講linux下面的文件的權(quán)限和安全性問題,并且探討一下如何在java程序中考慮文件的安全性
    2021-06-06
  • Java switch語句的使用詳解

    Java switch語句的使用詳解

    Java switch語句隨JDK演進(jìn)支持int/char、String及模式匹配,具備表達(dá)式限制、穿透控制、作用域隔離等特性,適用于狀態(tài)機(jī)、命令解析等場(chǎng)景,需注意類型兼容性及break使用,推薦使用箭頭語法和編譯器優(yōu)化提升代碼質(zhì)量
    2025-07-07
  • Java反射如何修改private final成員變量值

    Java反射如何修改private final成員變量值

    這篇文章主要介紹了Java反射如何修改private final成員變量值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    在 Java 編程中,arrays 和 arraylists 都是基本的數(shù)據(jù)結(jié)構(gòu),用來存放數(shù)據(jù)集合,雖然兩者的用途一樣,但是它們的特點(diǎn)極大地影響應(yīng)用的性能和靈活性,本文探討 arrays 和 arraylists 的重要特性,它們各自的強(qiáng)項(xiàng)和弱點(diǎn),,需要的朋友可以參考下
    2023-08-08
  • 解析Mybatis Porxy動(dòng)態(tài)代理和sql解析替換問題

    解析Mybatis Porxy動(dòng)態(tài)代理和sql解析替換問題

    這篇文章主要介紹了Mybatis Porxy動(dòng)態(tài)代理和sql解析替換,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

响水县| 南宫市| 平远县| 广平县| 绍兴县| 高密市| 临颍县| 台州市| 江门市| 增城市| 广州市| 西华县| 云梦县| 乳山市| 河南省| 嘉定区| 武宁县| 荥阳市| 龙游县| 伊宁市| 普安县| 曲水县| 久治县| 将乐县| 开化县| 宾川县| 平昌县| 涡阳县| 韩城市| 浮梁县| 邢台市| 禹州市| 大港区| 河池市| 保亭| 小金县| 庆云县| 凤山市| 昔阳县| 芷江| 砚山县|