給eladmin提的PR終于合進(jìn)去了

???????起因還是因?yàn)轵v飛學(xué)給我下發(fā)的任務(wù)战得,讓我把eladmin的持久層框架jpa換成我們熟悉的mybatis/mybatis plus,這可謂是一個(gè)比較龐大的工程梯澜,因?yàn)橐WCeladmin前端在接口不變的情況下可以直接登錄使用婿失,這就要求你要掌握整個(gè)eladmin源碼的運(yùn)行流程享幽。
???????就在第二天轉(zhuǎn)化security模塊中的獲取驗(yàn)證碼接口時(shí)睹限,發(fā)現(xiàn)了一個(gè)比較奇怪的情況譬猫,當(dāng)輸入驗(yàn)證碼結(jié)果為0的情況時(shí)讯檐,提示輸入驗(yàn)證碼錯(cuò)誤,例如:0+0染服、0x9等别洪。起初我以為我只是自己看錯(cuò)了,也沒在意柳刮,其他的驗(yàn)證碼結(jié)果可以通過是正確的挖垛,但是之后卻發(fā)現(xiàn)確實(shí)在結(jié)果為0的時(shí)候提示了驗(yàn)證碼輸入錯(cuò)誤,而其他結(jié)果輸入就顯示正確秉颗。

image.png

???????第一時(shí)間先是和小桑學(xué)長提出這個(gè)問題痢毒,經(jīng)排查后發(fā)現(xiàn)redis里存入的驗(yàn)證碼結(jié)果是“0.0”,是一個(gè)浮點(diǎn)型數(shù)據(jù)蚕甥,難怪前端輸入0會(huì)報(bào)錯(cuò)哪替,我刷新了幾次驗(yàn)證碼又找到一個(gè)結(jié)果為0的驗(yàn)證碼,這次輸入0.0就成功了梢灭,看來是驗(yàn)證碼放入redis的問題,那就是在獲取驗(yàn)證碼接口中出了問題蒸其。
???????eladmin引入的驗(yàn)證碼為:

<dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
            <version>1.6.2</version>
</dependency>

???????最新的版本1.6.2也是1年前的了敏释。eladmin中獲取驗(yàn)證碼的接口是在security模塊下的rest/AuthorizationController中的/code接口。eladmin默認(rèn)使用的是算數(shù)型驗(yàn)證碼摸袁,放入緩存中的值為captcha.text()钥顽,Captcha是驗(yàn)證碼類,text()方法是將驗(yàn)證碼的結(jié)果以字符形式輸出靠汁,那問題就出現(xiàn)在這里了蜂大,經(jīng)測試,當(dāng)驗(yàn)證碼類型為 arithmetic時(shí)且長度 >= 2 時(shí)蝶怔,captcha.text()的結(jié)果有幾率為浮點(diǎn)型奶浦,那么根本的問題其實(shí)不在于eladmin,而是easy-captcha的問題踢星,不過可以先治標(biāo)澳叉,解決方法就是對(duì)captcha.text()的結(jié)果以"."分割,取第一部分沐悦,這樣就可以把數(shù)據(jù)的小數(shù)部分去掉成洗,魯棒性也比較高。

String captchaValue = captcha.text();
        if (captcha.getCharType() - 1 == LoginCodeEnum.arithmetic.ordinal() & captchaValue.contains(".")) {
            captchaValue = captchaValue.split("\\.")[0];
        }

???????修改之后便給github eladmin提了一個(gè)pr藏否,等待著管理員elunez的審核通過瓶殃,畢竟這是第一次給人家大的開源項(xiàng)目提pr,還是比較緊張的副签。
???????學(xué)長鼓勵(lì)我追尋根本原因遥椿,之后又把easy-captcha的源碼給拉了下來基矮,經(jīng)一段時(shí)間的排查定位到根本問題是在算數(shù)型驗(yàn)證碼抽象類中的問題,在ArithmeticCaptchaAbstract中一串代碼:

 ScriptEngineManager manager = new ScriptEngineManager();
 ScriptEngine engine = manager.getEngineByName("javascript");
        try {
            chars = String.valueOf(engine.eval(sb.toString().replaceAll("x", "*")));
        } catch (ScriptException e) {
            e.printStackTrace();
        }

???????其中關(guān)鍵問題就是在engine.eval中修壕,這個(gè)方法可以計(jì)算出一個(gè)算數(shù)式的結(jié)果并輸出愈捅,但是返回值類型Object,而實(shí)際有一部分為整形慈鸠,一部分為浮點(diǎn)型表锻,而easy-captcha并未對(duì)其處理氢橙,而是直接轉(zhuǎn)成字符串,而text()方法輸出的就是這個(gè)。由于強(qiáng)轉(zhuǎn)也比較麻煩蛉幸,最后也是用了比較粗暴的辦法就是直接分割字符串——split("\.")[0];
???????順便也提了一個(gè)pr,但是這個(gè)可能審批過的概率不大闽坡,畢竟上次更新都是7個(gè)月之前的事了伶贰。而我給eladmin提的pr也是一天天過去,其中有看到比我提交的早的分支被關(guān)閉娃肿,我還是比較恐慌的咕缎。
???????之后小桑學(xué)長在測試部門的時(shí)候又發(fā)現(xiàn)了一個(gè)bug,但是eladmin官方在幾天前最新的一次分支就是這個(gè)bug的修復(fù)料扰,但是小桑學(xué)長說可以簡化寫法凭豪,我就根據(jù)小桑學(xué)長的寫法又提了個(gè)pr,不料這次過了一會(huì)就被關(guān)閉了晒杈,并不是沒被采納嫂伞,而是eladmin自己根據(jù)小桑學(xué)長的的方法改了代碼。

image.png

???????這個(gè)關(guān)了就關(guān)了吧拯钻,還剩一個(gè)pr帖努。終于,9天過后粪般,我的郵箱收到了一封郵件拼余,顯示 Merged #464 into master. 功夫不負(fù)有心人,提的pr總算是合進(jìn)去了亩歹。
image.png

image.png

???????最后還要感謝小桑學(xué)長的幫助姿搜。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捆憎,隨后出現(xiàn)的幾起案子舅柜,更是在濱河造成了極大的恐慌,老刑警劉巖躲惰,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件致份,死亡現(xiàn)場離奇詭異,居然都是意外死亡础拨,警方通過查閱死者的電腦和手機(jī)氮块,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門绍载,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滔蝉,你說我怎么就攤上這事击儡。” “怎么了蝠引?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵阳谍,是天一觀的道長。 經(jīng)常有香客問我螃概,道長矫夯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任吊洼,我火速辦了婚禮训貌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冒窍。我一直安慰自己递沪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布综液。 她就那樣靜靜地躺著款慨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪意乓。 梳的紋絲不亂的頭發(fā)上樱调,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天约素,我揣著相機(jī)與錄音届良,去河邊找鬼。 笑死圣猎,一個(gè)胖子當(dāng)著我的面吹牛士葫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播送悔,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慢显,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了欠啤?” 一聲冷哼從身側(cè)響起荚藻,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洁段,沒想到半個(gè)月后应狱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祠丝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年疾呻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了除嘹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岸蜗,死狀恐怖尉咕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情璃岳,我是刑警寧澤年缎,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站矾睦,受9級(jí)特大地震影響晦款,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枚冗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一缓溅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赁温,春花似錦坛怪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稚疹,卻和暖如春居灯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背内狗。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工怪嫌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柳沙。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓岩灭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赂鲤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子噪径,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355