当前位置: 首页 > 后端技术 > Java

经过一个多月的等待,我有幸成为Spring相关项目的Contributor

时间:2023-04-02 09:51:45 Java

给开源项目贡献代码是比较困难的,尤其是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,Listfilters){if(!filters.isEmpty()){logger.info(LogMessage.format("Willnotsecure%s",requestMatcher));}else{logger.info(LogMessage.format("Willsecure%swith%s",requestMatcher,filters));}this.requestMatcher=requestMatcher;this.filters=newArrayList<>(filters);}3.1版本的日志逻辑错误到5.6版本!要修好,只需要换个位置,我妈也应该把这个bug改掉。但是直到最近有人提交了修复(5.7将修复此错误)时,才没有人发现并质疑它。所以你要善于发现一些问题和细节,同时要敢于质疑,即使提问错了,你也不会损失什么。要有专长,我和大家一样,平时什么都学,没办法!作为一个原创科技博主,太容易对内容感到焦虑了。但是我特意保证了有些东西要学深,有些东西一定要成为你的独门绝技,一定要擅长多个专长,这样你在专长领域可能会有更多的机会。TODO只是成为开源贡献者的开始,更多的挑战还在后头。有人问我为什么最近写得少了!这是我最近一直在做的事情。首先,因为疫情,我被隔离在家工作。其次,有几个开源贡献正在进行中。另外,我正在开发一个基于SpringAuthorizationServer的开源项目IdServer。您可以将其视为keycloak的简化版本。即使是初始功能也相对简单。先学了layui,界面做不好。放个截图。做这个东西很有挑战性,前端真的很难!目前已经初具规模,近期将发布预览版。也欢迎学生参与和贡献。关注公众号:Felordcn获取更多资讯个人博客:https://felord.cn