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

使用@PathVariable時(shí)候無(wú)法將參數(shù)映射到變量中的解決

 更新時(shí)間:2021年08月17日 10:52:20   作者:titymt  
這篇文章主要介紹了使用@PathVariable時(shí)候無(wú)法將參數(shù)映射到變量中的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用@PathVariable無(wú)法將參數(shù)映射到變量中

    @GetMapping("find/name/{firstName}")//URI中的變量名稱必須要與controller中的方法實(shí)參明一致
    public String findPeopleByFirtName(@PathVariable String firstName){//這必須與URI中的名稱一致
 
        List<People> peoples = peopleDAO.findByFirstName(firstName);
        peoples.forEach(p->System.out.println(p));
        return "查詢成功";
    }

第一次時(shí),URI中為firstname,方法名中使用了firstName結(jié)果報(bào)錯(cuò)

然后改為一致,URI中使用firstName,方法名中使用firstName問(wèn)題解決。

springmvc 使用@PathVariable時(shí),應(yīng)該注意點(diǎn)什么?

近來(lái)在做庫(kù)存調(diào)劑系統(tǒng)時(shí),我從前臺(tái)到后臺(tái)的傳值方式,主要包括:1個(gè),用@PathVariable或者@RequestParam從路徑??;大于一個(gè),用于更新或者添加操作的,我用的是表單實(shí)體傳到后臺(tái);大于一個(gè),用于查詢的,我用的@RequestBody(好吧,我承認(rèn)這個(gè)只是我覺(jué)得好玩,但沒(méi)有多少人愿意在后臺(tái)一行又一行的寫(xiě):String test=request.getParameter("test");吧?????)

現(xiàn)在,主要就是想說(shuō)一個(gè)從路徑取值的“坑”,而重中之重,就想說(shuō)一下我更偏愛(ài)的@PathVariable(別問(wèn)我為什么,/{param}/fn.do,簡(jiǎn)單?。?/p>

一、使用@PathVariable的轉(zhuǎn)變過(guò)程

首先:

在盤(pán)古開(kāi)天辟地時(shí),就是一切還很混沌時(shí),姑娘我連用@PathVariable取值都沒(méi)有取過(guò)來(lái),還蒙圈蒙了一小會(huì)兒,完全不明白發(fā)生了什么,因?yàn)槲铱粗业恼Z(yǔ)法和格式,哪兒哪兒都對(duì),但就是沒(méi)有傳過(guò)來(lái)值。我一想我原來(lái)寫(xiě)/{param}/fn.do這種方式傳值的時(shí)候,也沒(méi)有問(wèn)題呀,怎么今天是見(jiàn)鬼了???? 蒙圈完了之后,就發(fā)現(xiàn)端倪了。

請(qǐng)看看我怎么寫(xiě)的哈:

@RequestMapping("/dealerStock/swapOrder/{orderID}/cancelAuditThisOrder.do")
public @ResponseBody String cancelAuditThisOrder(@PathVariable("OrderID") String strOrderID)){
...
...
}

然后的然后,我就一直沒(méi)有請(qǐng)求到這個(gè)方法,更別談什么有沒(méi)有取到值的問(wèn)題!后來(lái)解決的時(shí)候,真想一掌拍自己腦門上!

然后:

當(dāng)代碼規(guī)范審查通過(guò)后,也經(jīng)過(guò)了測(cè)試部的一級(jí)功能業(yè)務(wù)測(cè)試以及業(yè)務(wù)部的二級(jí)業(yè)務(wù)流程測(cè)試。文檔之類的,都準(zhǔn)備好了(我還能再說(shuō)什么呢,無(wú)聲的兩個(gè)呵 呵) 正要布上去生產(chǎn)線的時(shí)候,老大再次審查了一遍代碼,審查到最后也沒(méi)個(gè)啥結(jié)果,但是,突然間看到那個(gè)@PathVariable就問(wèn)了我兩個(gè)問(wèn)題:一,如果我的ID是不連續(xù)的,這種方法還能好使嗎?比如說(shuō):HC 782981;二,是不是只要我拿到這個(gè)請(qǐng)求路徑,而我隨便推測(cè)一個(gè)ID號(hào),就能避過(guò)用戶操作別人的數(shù)據(jù)?

姑娘我再次被雷擊倒,無(wú)言以對(duì),馬上實(shí)際驗(yàn)證。結(jié)果:Yes! 你說(shuō)第一個(gè)的結(jié)果是Yes,這個(gè)我很滿意,但第二個(gè)是Yes,就很想哭了。 測(cè)試出結(jié)果后,就請(qǐng)命去干掉這個(gè)問(wèn)題了。

我的第一步嘗試:

添加method=RequestMethod.post,也就是說(shuō)用戶不能輸入U(xiǎn)rl地址以get的形式獲取數(shù)據(jù),只能通過(guò)系統(tǒng)內(nèi)部請(qǐng)求。

組長(zhǎng):你自己說(shuō),就算咱們改成了Post請(qǐng)求,你能不能訪問(wèn)到?

姑娘:我能,就自己寫(xiě)一個(gè)按鈕,再用post請(qǐng)求就行了。如果用戶里面有懂點(diǎn)程序編碼的,輕而易舉就能破掉。我再去改

組長(zhǎng):其實(shí),我們只能防君子,哪個(gè)系統(tǒng)都有漏洞,沒(méi)有絕對(duì)的權(quán)限控制和安全,但咱們盡量的給做好。

我的第二步嘗試:

在第二步嘗試前,我想了一會(huì)兒。我發(fā)現(xiàn)這個(gè)事件有以下幾個(gè)突破口:一、像訂單編號(hào)這個(gè)敏感的數(shù)據(jù),能不能做到不被推測(cè)出來(lái)?二、用戶是根據(jù)訪問(wèn)路徑,然后加上一個(gè)ID號(hào)去請(qǐng)求,如果用戶拿不到訪問(wèn)路徑呢?三、要點(diǎn)就是用戶只能操作自己的數(shù)據(jù),我可以在敏感操作的時(shí)候,同時(shí)校驗(yàn)當(dāng)前用戶。四、既然都是@PathVariable這種方式帶來(lái)的一些問(wèn)題,那我可以把相應(yīng)的方法,換掉這種傳值方式。五、用戶看到的是一個(gè)請(qǐng)求方法路徑,我可不可以在路徑中加入隨機(jī)密碼鹽,進(jìn)一步的控制關(guān)鍵操作的訪問(wèn)。

好吧,為了方便迅速,我直接把這種傳值方式給改了。當(dāng)然也沒(méi)有改完,時(shí)間關(guān)系,像一些本來(lái)就屬于公開(kāi)數(shù)據(jù)的內(nèi)容,還是沒(méi)改。

我的第三步嘗試:

在第二步的時(shí)候,就已經(jīng)改完代碼了。然后,我覺(jué)得我是一個(gè)很較真的人。忙里偷閑,我把我在第二步嘗試中想到了幾個(gè)點(diǎn),都寫(xiě)代碼測(cè)了測(cè)。最先測(cè)出來(lái)的是第三種(同時(shí)檢驗(yàn)當(dāng)前用戶,也就簡(jiǎn)單類似于where orderID=? and userID=? ) 其次,還測(cè)了測(cè)那個(gè)密碼鹽值,也確實(shí)能夠控制住,但是,想了想系統(tǒng)的性質(zhì)和資源的最終走向,沒(méi)改。然后,去禁止用戶打開(kāi)開(kāi)發(fā)者工具或者查看源代碼,然而,這根本不是我能控制住的。我也最多就是能控制住快捷鍵打開(kāi),但人家還有鼠標(biāo)????????瀏覽器提供的功能,不是我想干掉就干掉滴滴滴滴。

我的第一個(gè)方案,就是改造訂單生成的方式,然后我覺(jué)得吧,這個(gè)好像不怎么靠譜。但毫無(wú)疑問(wèn)比當(dāng)前的生成方式要靠譜得太多,但這要改動(dòng)下來(lái),呃,原諒我很慫。

二、個(gè)人總結(jié)

我最大的問(wèn)題,不是我后來(lái)想不出更為優(yōu)雅的方案去解決,而是,我從根本上,對(duì)這是個(gè)問(wèn)題的問(wèn)題毫無(wú)知覺(jué)。我甚至都不覺(jué)得那樣有什么問(wèn)題,這才是我最該考慮的點(diǎn)。

其實(shí),我用@PathVariable或者什么別的方式去傳值,這都無(wú)可厚非。但我也應(yīng)該更進(jìn)一步的考慮到它的應(yīng)用場(chǎng)景和系統(tǒng)功能鎖涉及到的數(shù)據(jù),以及可能帶來(lái)的后果。就比如說(shuō)我這個(gè)@PathVariable的問(wèn)題,在別的查詢一些區(qū)域信息(公共展示數(shù)據(jù))的時(shí)候,我也這么用了,組長(zhǎng)也看見(jiàn)了,但為什么他著重說(shuō)了訂單這一塊,還要求這一塊必須改。反正,我就是欠思考。。。。。。

很多很多的東西,都是建立在日常生活體驗(yàn)上的。我以前就很崇拜架構(gòu)師,現(xiàn)在也很崇拜。但是,我突然明白,架構(gòu)師也不是光有空架子的。就比如說(shuō)我自己吧,我還算是亂七八糟的想法挺多的那種(雖然并不是每個(gè)都靠譜)但是,做事情不能光憑想象,要實(shí)際操作的。

感覺(jué)最近做得比較好一點(diǎn)的就是:

1,因?yàn)橛幸粋€(gè)地方查詢的數(shù)據(jù)有很多,那天我跟組長(zhǎng)提出,我要換一種查詢方法,提升查詢效率。然后組長(zhǎng)就問(wèn)我究竟想怎么換?我就直接同時(shí)運(yùn)行了兩套代碼干同樣的事兒給他看,結(jié)果,就很so easy的換成了我想換的那種方式,我想說(shuō)的話,全都在代碼里。后來(lái)弄完了,閑下來(lái),我解釋了一下不同點(diǎn),關(guān)鍵點(diǎn)。

2,因?yàn)閺?qiáng)調(diào)代碼規(guī)范和效率嘛。我就在自己私下寫(xiě)代碼的時(shí)候,旁邊就放著一本代碼整潔之道,還有阿里代碼規(guī)范手冊(cè),然后還有我閑下來(lái)的時(shí)候,去官網(wǎng)找的一些常用數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型的應(yīng)用對(duì)比。我是一邊寫(xiě),一邊看。有不知道怎么寫(xiě)的,就干脆先看一眼,照著書(shū)寫(xiě)。剛開(kāi)始挺痛苦的,因?yàn)閷?xiě)一句就錯(cuò)一句,也不能說(shuō)錯(cuò),就是不夠優(yōu)美。但是,感覺(jué)現(xiàn)在慢慢變得好了特別特別多。

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

相關(guān)文章

  • java 序列化對(duì)象 serializable 讀寫(xiě)數(shù)據(jù)的實(shí)例

    java 序列化對(duì)象 serializable 讀寫(xiě)數(shù)據(jù)的實(shí)例

    java 序列化對(duì)象 serializable 讀寫(xiě)數(shù)據(jù)的實(shí)例,需要的朋友可以參考一下
    2013-03-03
  • MyBatis-Plus自定義通用的方法實(shí)現(xiàn)

    MyBatis-Plus自定義通用的方法實(shí)現(xiàn)

    MP自帶的條件構(gòu)造器雖然很強(qiáng)大,有時(shí)候也避免不了寫(xiě)稍微復(fù)雜一點(diǎn)業(yè)務(wù)的sql,本文主要介紹了MyBatis-Plus自定義通用的方法實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Resty開(kāi)發(fā)restful版本的Jfinal深入研究

    Resty開(kāi)發(fā)restful版本的Jfinal深入研究

    這篇文章主要為大家介紹了Resty開(kāi)發(fā)restful版本的Jfinal深入研究有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java 線程對(duì)比(Thread,Runnable,Callable)實(shí)例詳解

    Java 線程對(duì)比(Thread,Runnable,Callable)實(shí)例詳解

    這篇文章主要介紹了Java 線程(Thread,Runnable,Callable)實(shí)例詳解的相關(guān)資料,這里對(duì)java 線程的三種方法進(jìn)行了對(duì)比,需要的朋友可以參考下
    2016-12-12
  • 聊聊SpringBoot中組件無(wú)法被注入的問(wèn)題

    聊聊SpringBoot中組件無(wú)法被注入的問(wèn)題

    這篇文章主要介紹了SpringBoot中組件無(wú)法被注入的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java線程組構(gòu)造方法源碼解析

    java線程組構(gòu)造方法源碼解析

    這篇文章主要為大家介紹了java線程組構(gòu)造方法源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java中的異常Exception與處理方式詳解

    Java中的異常Exception與處理方式詳解

    這篇文章主要介紹了Java中的異常Exception與處理方式詳解, Java語(yǔ)言中,將程序執(zhí)行中發(fā)生的不正常情況稱為"異常"(開(kāi)發(fā)過(guò)程中的語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤不是異常),需要的朋友可以參考下
    2024-01-01
  • JDK版本修改不生效的解決方法

    JDK版本修改不生效的解決方法

    本文主要介紹了在配置新電腦環(huán)境時(shí)遇到JDK版本切換失敗的問(wèn)題,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度示例

    Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度功能,涉及java基于HashMap的數(shù)值計(jì)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • 關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄

    關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄

    這篇文章主要介紹了關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論

齐河县| 宁明县| 衡南县| 静海县| 昌江| 巴塘县| 华蓥市| 德庆县| 乐都县| 綦江县| 景宁| 宝兴县| 崇仁县| 正镶白旗| 资溪县| 南靖县| 高尔夫| 天柱县| 金山区| 剑川县| 将乐县| 旬邑县| 新野县| 平安县| 合肥市| 若尔盖县| 金寨县| 察隅县| 桦甸市| 巫山县| 崇礼县| 广丰县| 贵州省| 连山| 葫芦岛市| 大新县| 吉木萨尔县| 鸡西市| 荣成市| 玉屏| 隆安县|