關于記錄一下“bug”,在做圖片上傳的時候出現的小問題

項目場景:

之前的話寫過csdn,最近出現了一些小事情,所以耽誤了好久沒有更新,最近把以前的項目拿出來然后改了下環境就出現了一些問題,該項目使用SpringBoot3.5?+ SpringMVC + Mybatis-Plus3.5.0,然后權限控制采用的是SpringSecurity等,因為問題主要出現在這幾個部分,所以我就不介紹項目的廢話了,直接開始。


問題描述

在修改項目版本的時候,舊版本很多的一些東西都被優化掉了,最近遇見的主要問題就是三個:1.版本與版本不兼容的問題;2.mysql數據庫突然無法使用,密碼連接失效;3.上傳產品圖片時出現控制臺不報錯但是無法顯示圖片的情況;如果有朋友是因為1,2出了問題的話可以去博客園,里面有解決的具體辦法,我今天主要寫的是圖片上傳失敗問題。


原因分析:

原本的代碼主要出現的問題是:

  1. 缺少 CSRF 防護

    • 未攜帶 CSRF Token,在 Spring Security 環境下會被攔截,導致請求失敗(403 錯誤)。

    • 存在安全風險,容易受到跨站請求偽造(CSRF)攻擊。

  2. 響應數據處理不夠健壯

    • 直接訪問?result.data[0],未校驗?result.data?是否存在或是否為空數組,可能導致?TypeError(如?Cannot read properties of undefined)。

    • 沒有錯誤處理邏輯,上傳失敗時用戶無明確反饋。

  3. 代碼可讀性和維護性較差

    • 未對關鍵變量(如圖片 URL)進行提取,代碼邏輯不夠清晰。

    • 缺少必要的注釋,不利于后續維護。

之后修改完的代碼與原本的代碼相比優點:

  1. 安全性更高:集成 CSRF 防護,避免被 Spring Security 攔截或遭受攻擊。

  2. 代碼更健壯:通過變量提取和結構化編寫,減少潛在錯誤。

  3. 更易維護:清晰的代碼風格便于后續擴展和調試。

這個改進建議是我去將改好的代碼發給AI給的建議

  • 補充?error?回調,處理網絡或服務器錯誤。

  • 增加響應數據校驗(如檢查?response.errno?或?response.data?是否有效)。

我后面用的代碼沒有采用AI的建議,需要的朋友可以為了防止出現問題可以去根據建議優化一下。


解決方案:

解決這個問題主要分兩步:

1.在需要的.html文件header頭部中,通過代碼以下代碼片段一,直接復制到里面即可;

2.在做上傳文件的div里面,去加上下面的<script>標簽中的代碼,相關修改代碼片段一,片段二代碼如下:

// 代碼片段一<header>
<meta name="_csrf" th:content="${_csrf.token}"/><meta name="_csrf_header" th:content="${_csrf.headerName}"/>
</header>// 獲取 Token 和 Header 名稱
const token = document.querySelector('meta[name="_csrf"]').content;
const header = document.querySelector('meta[name="_csrf_header"]').content;// 在 AJAX 請求中添加 CSRF 頭
fetch("/api/submit", {method: "POST",headers: {[header]: token  // 動態使用 header 名}
});
// 代碼片段二<script>$("#pImageFile").change(function() {$("#uploadPImage").ajaxSubmit({url: "/backstage/product/upload",type: "post",headers: {"X-CSRF-TOKEN": $("meta[name='_csrf']").attr("content")},success: function(response) {// 安全訪問數組元素// 圖片上傳成功后,圖片回顯到pImage上const imageUrl = response.data[0];$("#pImage").attr("src", imageUrl);// 上傳成功后,圖片地址存儲在hiddenPImage中$("#hiddenPImage").val(imageUrl);}});});</script>

最后,也希望有更好的辦法的話反饋給我,一起學習,謝謝大家了!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91867.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91867.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91867.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構:基礎知識和鏈表①

一、概念程序數據結構算法1.描述數據存儲和操作的結構 2.操作數據對象的方法二、衡量代碼的質量和效率 無論代碼操作數據量多大&#xff0c;希望程序代碼的運行時間保持恒定 隨著數據的增長&#xff0c;程序運行時間緩慢增長隨著數據的增長&#xff0c;程序運…

進階向:自動化天氣查詢工具(API調用)

自動化天氣查詢工具&#xff08;API調用&#xff09;完全指南天氣數據是日常生活中經常需要查詢的信息之一。本教程將介紹如何使用Python編寫一個自動化天氣查詢工具&#xff0c;通過調用開放的天氣API獲取實時天氣數據。這個工具適合完全不懂編程的新手學習&#xff0c;將從最…

【ROS2】常用命令

1、目錄結構在 ROS 2 包中&#xff0c;launch、urdf、rviz&#xff08;通常指 RViz 配置文件&#xff09;、config 等文件夾應直接放在包的根目錄下&#xff08;與 robot_arm/ Python 模塊目錄同級&#xff09;。這是 ROS 2 社區的通用約定&#xff0c;便于工具&#xff08;如 …

基礎組件(三):mysql連接池

文章目錄一、MySQL連接池設計1. 連接池解決了什么問題&#xff1f;連接池的作用 &#xff08;好處&#xff09;為什么不創建多條連接而用連接池2. 同步和異步連接池的區別同步連接池&#xff08;場景局限&#xff0c;應用服務器啟動時初始化資源&#xff09;異步連接池&#xf…

FI文件包含漏洞

本地文件包含&#xff08;LFI&#xff09;文件包含開發人員將可重復使用的內容寫到單個文件中&#xff0c;使用時直接調用此文件&#xff0c;無需再次編寫&#xff0c;這種調用文件的過程一般被稱為文件包含。這樣編寫代碼能減少代碼冗余&#xff0c;降低代碼后期維護難度&…

rapidocr_web v1.0.0發布了

建立RapidOCRWeb獨立倉庫 終于將web這塊代碼移了出來&#xff0c;成立了獨立倉庫RapidOCRWeb (https://github.com/RapidAI/RapidOCRWeb )。這樣以來&#xff0c;RapidOCR倉庫下的各個衍生項目均有自己的獨立倉庫&#xff0c;可以單獨控制發版和維護。這也算是為RapidOCR減負了…

Arduino IDE離線安裝ESP8266板管理工具

文章目錄概要官網地址開發板管理地址安裝ESP8266開發板支持離線安裝額外記錄NODE啟動服務概要 Arduino IDE離線安裝ESP8266板管理工具&#xff0c;在線安裝因為網絡或者https的問題不能安裝 官網地址 Adruino&#xff1a;https://www.arduino.cc/ ESP8266項目&#xff1a;<…

兩款免費數據恢復軟件介紹,Win/Mac均可用

數據已成為我們生活與工作中不可或缺的重要組成部分。無論是珍貴的家庭照片、關鍵的工作文檔&#xff0c;還是重要的學習資料&#xff0c;都以數據的形式存儲在各類設備中。然而&#xff0c;數據丟失的情況卻時常發生&#xff0c;可能是誤操作刪除&#xff0c;可能是設備意外損…

Java開發中敏感信息加密存儲全解析:筑牢數據安全防線

Java開發中敏感信息加密存儲全解析&#xff1a;筑牢數據安全防線 一、引言 1.1 敏感信息存儲的現狀與挑戰 在數字化時代&#xff0c;數據已然成為企業和組織的核心資產之一&#xff0c;而敏感信息的存儲更是重中之重。從日常的用戶登錄密碼、身份證號碼&#xff0c;到金融領域…

list的使用和模擬

(一)list的了解 (1)簡單了解 list的文檔介紹 list是基于雙向鏈表的序列式容器&#xff0c;支持雙向迭代和任意位置的常數時間插入刪除&#xff0c;相比 array、vector 等容器在這類操作上更高效&#xff0c;但不支持隨機訪問&#xff08;訪問需線性遍歷&#xff09;且因額外…

Docker 初學者需要了解的幾個知識點 (五):建容器需要進一步了解的概念

之前在《Docker 初學者需要了解的幾個知識點》幾篇文章里&#xff0c;我們梳理了 Docker 的核心概念&#xff08;如鏡像、容器、網絡等&#xff09;&#xff0c;但在實際搭建 ThinkPHP 容器環境時&#xff0c;又遇到了一些更具體的術語和配置場景。這些內容和實操結合緊密&…

【數據結構】棧的順序存儲(整型棧、字符棧)

【數據結構】棧的順序存儲&#xff08;整型棧、字符棧&#xff09;一、棧的結構定義二、字符棧的初始化、入棧、出棧、判斷是否棧為空、獲取棧頂元素、獲取棧的當前元素個數等操作三、整型棧的初始化、入棧、出棧、判斷是否棧為空、獲取棧頂元素、獲取棧的當前元素個數等操作一…

【大模型實戰】向量數據庫實戰 - Chroma Milvus

在 RAG&#xff08;檢索增強生成&#xff09;場景中&#xff0c;非結構化數據&#xff08;文本、圖像等&#xff09;的高效檢索是核心需求。傳統關系型數據庫難以勝任&#xff0c;而向量數據庫通過將數據轉化為向量、基于相似度快速匹配&#xff0c;成為 RAG 的關鍵支撐。本文聚…

pytorch程序語句固定開銷分析

深入探索PyTorch與Python的性能微觀世界&#xff1a;量化基礎操作的固定開銷 在深度學習的性能優化工作中&#xff0c;開發者通常將目光聚焦于模型結構、算法效率和并行計算策略。然而&#xff0c;在這些宏觀優化的背后&#xff0c;構成我們代碼的每一條基礎語句——無論是PyTo…

ABP VNext + CloudEvents:事件驅動微服務互操作性

ABP VNext CloudEvents&#xff1a;事件驅動微服務互操作性 &#x1f680; &#x1f4da; 目錄ABP VNext CloudEvents&#xff1a;事件驅動微服務互操作性 &#x1f680;一、引言 ??? TL;DR&#x1f4da; 背景與動機&#x1f3d7;? 整體架構圖二、環境準備與依賴安裝 &am…

軟件測試測評公司關于HTTP安全頭配置與測試?

瀏覽器和服務器之間那幾行看不見的HTTP安全頭配置&#xff0c;往往是抵御網絡攻擊的關鍵防線。作為軟件測試測評公司&#xff0c;我們發現超過六成的高危漏洞源于安全頭缺失或誤配。別小看這些響應頭&#xff0c;它們能直接掐斷跨站腳本、點擊劫持、數據嗅探的攻擊路徑。五條命…

Mysql集成技術

目錄 mysql的編譯安裝與部署 1.編譯安裝mysql 2.部署mysql mysql主從復制 什么是mysql主從復制&#xff1f; 1.配置master 2.配置slave 3.存在數據時添加slave2 4.GTID模式 什么是GTID模式&#xff1f; 配置GTID 5.延遲復制 6.慢查詢日志 核心作用 開啟慢查詢日志…

《MySQL進階核心技術剖析(一): 存儲引擎》

目錄 一、存儲引擎 1.1 MySQL體系結構 1.2 存儲引擎介紹 1). 建表時指定存儲引擎 2). 查詢當前數據庫支持的存儲引擎 1.3 存儲引擎特點 1.3.1 InnoDB 1.3.2 MyISAM 1.3.3 Memory 1.3.4 區別及特點 1.4 存儲引擎選擇 一、存儲引擎 1.1 MySQL體系結構 1). 連接層 最上…

sqli-labs:Less-26關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $sql"SELECT * FROM users WHERE id$id LIMIT 0,1";注入類型&#xff1a;字符串型&#xff08;單引號包裹&#xff09;、GET操作提示&#xff1a;參數需以閉合關鍵參數&#xff1a;id php輸出語句的部分代碼&am…

Spring Boot 的事務注解 @Transactional 失效的幾種情況

開發中我們經常會用到 Spring Boot 的事務注解&#xff0c;為含有多種操作的方法添加事務&#xff0c;做到如果某一個環節出錯&#xff0c;全部回滾的效果。但是在開發中可能會因為不了解事務機制&#xff0c;而導致我們的方法使用了 Transactional 注解但是沒有生效的情況&…