给开源项目贡献代码是比较困难的,尤其是spring,算是比较出名的项目,至少胖哥是这么认为的。有时候我们的灵感可能与作者的设计意图不符,即使你的代码很优雅。我曾经向SpringSecurity提交了一个我认为很重要的优化,和作者来回交流了几十次也没能说服他。人家都说抽象接口是保留的,你自己实现一个也嫌不够。默认的刚好能用,但是我放弃了这个PR。没想到在SpringAuthorizationServer中,抓住了机会,被绝对接受了。等了一个多月,我的PR终于被接受了。之前在写SpringAuthorizationServer相关教程的时候,不小心在调用授权服务器元信息端点的时候加了一个锚点符号#,类似http://issuer.felord.cn/#,报请求错误。我在跟踪源码的时候,发现url已经校验过了,这个意想不到的结果说明一定是规则有漏洞。于是查了相关RFC的定义,发现是基于RFC8414的。本规范的实施没有技术含量。如果我告诉你,你可以做到,甚至比我做的还好,所以只要实施了,PR应该是不可能被接受的,中场休息时甚至可以开香槟。此优化将在0.3.0版本中实现。对于这个过程,我简单总结分享一下,可能对想参与开源贡献的你有所帮助。代码风格首先是代码风格。开源项目有一些代码风格要求。之前在很多地方都模仿(抄袭)了Spring的设计,所以在实现规范的时候特别注意这一点,比如命名风格,缩进等等,都是刻意的。理解项目的架构思路在整个PR过程中,我遇到的主要问题都在这里。虽然我最初的实施在生命周期内表现良好,但显然不在最佳位置。比如参数的校验可以写在控制层,也可以写在服务层。结果肯定没问题,但过程中可能会出现问题。作者与我交流并表达了他的设计思路,我很快就修正了这个问题。单元测试非常重要。实现的代码确实不多,单元测试的代码超过了差不多20倍。我们一般写一个main方法,简单sout打印一下,就搞定了。对于开源项目来说是不同的。特别是这个著名的开源框架需要您测试实施的各个方面。如果你想为开源项目贡献代码,你必须知道常见的断言和模拟存根。这个胖哥的博客felord.cn有相关介绍。Git规范Git提交规范胖哥也多次强调过它的重要性。在大型开源项目中遵循一些提交规范也是一个基本要求。您还应该熟悉PullRequest的规则和代码审查流程。这些努力都是在平时。Git你得精通。spring要求最少的特性提交,怎么说呢?您的实施必须是一个完整的单元,具有最小的粒度,您不能在一次提交中同时拥有增强功能和新功能。并且你的提交必须被压缩成一个gitcommit,即使它被发回修改。多使用gitcommit--amend-m'你的提交信息'。在一些不可避免的时候,gitrebase和squashcommits可能会帮助你。但是不要去深究Git原理,熟练使用工具就够了。善于发现,敢做敢为最重要的一点,你要善于发现,比如下面这个bug(还没完全修复),如果我说是bug,你会很惊讶,我当时也一样。publicDefaultSecurityFilterChain(RequestMatcherrequestMatcher,List
