經(jīng)過一個(gè)多月的等待我有幸成為Spring相關(guān)項(xiàng)目的Contributor

給開源項(xiàng)目尤其是Spring這種知名度高的項(xiàng)目貢獻(xiàn)代碼是比較難的应媚,起碼胖哥是這么認(rèn)為的。有些時(shí)候我們的靈感未必契合作者的設(shè)計(jì)意圖横浑,即使你的代碼十分優(yōu)雅萌腿。

我曾經(jīng)給Spring Security提交了一個(gè)我認(rèn)為非常重要的一項(xiàng)優(yōu)化,和作者溝通了幾十個(gè)來回?zé)o法說服他讥珍。人家說留了抽象接口历极,你覺得不對自己實(shí)現(xiàn)一個(gè)就是了,默認(rèn)的就是能用而已衷佃,無奈我就放棄了這個(gè)PR趟卸。

想不到在Spring Authorization Server中我抓住了一個(gè)能夠絕對被接受的機(jī)會(huì),經(jīng)過一個(gè)多月的等待氏义,最終我的PR被接受了锄列。

我在編寫Spring Authorization Server相關(guān)教程中,調(diào)用授權(quán)服務(wù)器元信息端點(diǎn)時(shí)不小心后面帶了個(gè)錨點(diǎn)符號(hào)#惯悠,類似http://issuer.felord.cn/#邻邮,報(bào)了一個(gè)請求錯(cuò)誤,在追蹤源碼的時(shí)候我發(fā)現(xiàn)對這個(gè)url是進(jìn)行過校驗(yàn)的克婶,出現(xiàn)了這種非預(yù)期的結(jié)果說明規(guī)則一定有漏洞饶囚。于是我查閱了相關(guān)RFC的定義帕翻,找到了依據(jù)RFC8414

這個(gè)規(guī)范的實(shí)現(xiàn)沒有什么技術(shù)含量萝风,我如果告訴你嘀掸,你也能做得到,甚至做得比我好规惰,所以只要實(shí)現(xiàn)了睬塌,PR被接受應(yīng)該是跑不了的事情,甚至可以半場開香檳歇万。在0.3.0版本中這個(gè)優(yōu)化將會(huì)實(shí)裝揩晴。對這個(gè)過程,我簡單總結(jié)了一下分享出來 贪磺,或許對希望參與開源貢獻(xiàn)的你有所幫助硫兰。

代碼風(fēng)格

首先是代碼風(fēng)格,開源項(xiàng)目都有一些代碼風(fēng)格要求寒锚,我之前有很多東西模仿(抄)了Spring的設(shè)計(jì)劫映,所以我在實(shí)現(xiàn)規(guī)范的時(shí)候特別注意了這一點(diǎn),命名風(fēng)格刹前、縮進(jìn)等等都反復(fù)推敲泳赋。

理解項(xiàng)目的架構(gòu)思想

在整個(gè)PR過程中,我出現(xiàn)的問題主要在這里喇喉。雖然我最初的實(shí)現(xiàn)執(zhí)行起來沒有問題祖今,完全在生命周期之內(nèi),但是顯然它的位置不是最佳拣技。比如參數(shù)的校驗(yàn)?zāi)憧梢詫懺诳刂茖忧埽部梢詫懺诜?wù)層,結(jié)果一定是沒問題的膏斤,但是過程可能有問題大渤。作者和我溝通了一番,表明了他的設(shè)計(jì)思路掸绞,很快我就糾正了這個(gè)問題泵三。

單元測試非常重要

實(shí)現(xiàn)代碼確實(shí)不多,單元測試的代碼幾乎超過了其20倍衔掸。我們平時(shí)寫個(gè)main方法簡單sout打印一下就完事了烫幕,對于開源項(xiàng)目可不一樣。尤其是這種知名開源框架敞映,需要你測試實(shí)現(xiàn)的方方面面较曼。如果你想為開源項(xiàng)目貢獻(xiàn)代碼,常用的斷言振愿、Mock插樁都要會(huì)捷犹,這個(gè)胖哥的博客felord.cn都有相關(guān)的介紹弛饭。

Git規(guī)范

Git 提交規(guī)范胖哥也多次強(qiáng)調(diào)了它的重要性,在大型開源項(xiàng)目中遵循一些提交規(guī)范也是一個(gè)基本要求萍歉。一些Pull Request的規(guī)則侣颂、代碼Review流程也要熟悉,這些功夫都在于平時(shí)枪孩。Git你得熟練憔晒。Spring要求最小功能提交,怎么說呢蔑舞?你的實(shí)現(xiàn)必須是一個(gè)最小粒度的完整單元拒担,你不能在一個(gè)提交中既有增強(qiáng)優(yōu)化(enhance)還有新特性(feature)。而且你的提交必須壓縮到一個(gè)git commit內(nèi)攻询,即使被打回去修改从撼。要多用

git commit --amend -m '你的提交信息'

在一些不得已的時(shí)候,git rebasesquash commits或許能幫到你钧栖。

但是千萬不要去搞什么Git原理底層低零,把工具用熟練就夠了。

要善于發(fā)現(xiàn)桐经,敢做敢為

最重要的一點(diǎn),你要善于發(fā)現(xiàn)浙滤,比如下面這個(gè)bug(現(xiàn)在還沒有徹底修復(fù))阴挣,如果我說它是個(gè)bug,你一定會(huì)大吃一驚纺腊,我當(dāng)時(shí)也是一樣的畔咧。


    public DefaultSecurityFilterChain(RequestMatcher requestMatcher, List<Filter> filters) {
        if (!filters.isEmpty()) {
            logger.info(LogMessage.format("Will not secure %s", requestMatcher));
        }
        else {
            logger.info(LogMessage.format("Will secure %s with %s", requestMatcher, filters));
        }
        this.requestMatcher = requestMatcher;
        this.filters = new ArrayList<>(filters);
    }

3.1版本log邏輯居然錯(cuò)到5.6版本!而修復(fù)它只需要改下位置揖膜,這個(gè)bug我媽應(yīng)該也會(huì)改誓沸。但是沒有人發(fā)現(xiàn)和質(zhì)疑它,直到最近有人提交了修復(fù)(5.7版本會(huì)修復(fù)這個(gè)bug)壹粟。

所以你要善于發(fā)現(xiàn)一些問題和細(xì)節(jié)拜隧,同時(shí)也要敢于質(zhì)疑,即使質(zhì)疑錯(cuò)了又不會(huì)損失什么趁仙。

要有專長

我和大家一樣洪添,平常也是什么都學(xué),沒辦法雀费!做原創(chuàng)技術(shù)博主太容易內(nèi)容焦慮了干奢。但是我刻意保證了一些東西去深入學(xué)習(xí),有些東西必須成為你的獨(dú)門絕技盏袄,要一精多專忿峻,這樣你在專長的領(lǐng)域可能有更多的機(jī)會(huì)薄啥。

TODO

對于成為開源貢獻(xiàn)者只是一個(gè)開始,更多的挑戰(zhàn)還在后面逛尚。有人問我最近為什么更文少了垄惧!這里也講一下我最近在做的事。

首先黑低,因?yàn)橐咔槲冶桓綦x在家辦公了赘艳。

其次,還有幾個(gè)開源貢獻(xiàn)正在進(jìn)行中克握。

還有蕾管,我正在做一個(gè)基于Spring Authorization Server的開源項(xiàng)目Id Server,你可以認(rèn)為是一個(gè)極簡版的keycloak菩暗,甚至最初的功能比較簡陋掰曾,layui都是先學(xué)的,界面我也做不好停团。放個(gè)截圖吧旷坦。

做這個(gè)東西很有挑戰(zhàn),前端真是太難了佑稠!目前已經(jīng)初具雛形秒梅,不日將放出預(yù)覽版,也歡迎各位同學(xué)參與貢獻(xiàn)舌胶。

關(guān)注公眾號(hào):碼農(nóng)小胖哥捆蜀,獲取更多資訊

個(gè)人博客:https://felord.cn

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市幔嫂,隨后出現(xiàn)的幾起案子辆它,更是在濱河造成了極大的恐慌,老刑警劉巖履恩,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锰茉,死亡現(xiàn)場離奇詭異,居然都是意外死亡切心,警方通過查閱死者的電腦和手機(jī)飒筑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绽昏,“玉大人扬霜,你說我怎么就攤上這事《妫” “怎么了著瓶?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啼县。 經(jīng)常有香客問我材原,道長沸久,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任余蟹,我火速辦了婚禮卷胯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘威酒。我一直安慰自己窑睁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布葵孤。 她就那樣靜靜地躺著担钮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尤仍。 梳的紋絲不亂的頭發(fā)上箫津,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音宰啦,去河邊找鬼苏遥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赡模,可吹牛的內(nèi)容都是我干的田炭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼漓柑,長吁一口氣:“原來是場噩夢啊……” “哼教硫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起欺缘,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤栋豫,失蹤者是張志新(化名)和其女友劉穎挤安,沒想到半個(gè)月后谚殊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛤铜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年嫩絮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片围肥。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剿干,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出穆刻,到底是詐尸還是另有隱情置尔,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布氢伟,位于F島的核電站榜轿,受9級(jí)特大地震影響幽歼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谬盐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一甸私、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧飞傀,春花似錦皇型、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至外冀,卻和暖如春寡键,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雪隧。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工西轩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脑沿。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓藕畔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庄拇。 傳聞我的和親對象是個(gè)殘疾皇子注服,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容