咱们作了一个通用型的api平台,给全公司的接口使用。不少接口陆陆续续接入了,还面临一个问题,就是目前的代码对使用basic验证的webservice接口没法验证身份。拥有这方面需求的业务开发团队对咱们架构组提出了强烈的呼吁,上周五领导让我作一下,凝练起来就三个字,搞定它。java
没成想,一开始就钻进了牛角尖,在死胡同了团团转出不来。先是研究wsdl4j的jar,发现没有对basic验证的支持,再研究一遍soapui的jar,发现它仅仅是传入了用户名密码,在实际链接读取wsdl的时候,也没有传入用户名密码。研究了半下午以后,陷入死局,遂展示以下坑逼方案:web
1.抽取wsdl4j的代码,本身复写,而后打包放进去。写着写着,发现wsdl4j的类,不少不是final就是protect包范围内可用的,要从新写一遍,类太多了,并且会破坏掉原有的线程安全设置。api
2.摧毁上个方案的代码,开始使用ASM字节码改动原始代码,本身实现AOP。后来发现,即便如此,具体链接的时候仍然会扔出来401错误,只不过结果是正确的而已。安全
3.摧毁第二个方案的代码,从新开始研究soapui的jar。总以为它使用的方式,必定是java容许的,并且是很方便的方式。发现内部有从url中获取用户名密码的方式,遂各类实验。最后虽成功,可是看着拼接起来带着用户名密码的url,心里总有一种哔了狗的感受,这没法经过我心里的代码洁癖认证。架构
周五就这样结束了,带着一脸的懵逼和惆怅,周末带带孩子以求心里安宁。jvm
周一开始了,脑壳焕新,忽然想起本身之前写的动态客户端访问webservice组件,遂拉出来鞭尸,以求能找到蛛丝马迹。拖出来本身的代码一看,忽然明白了牛角尖钻在哪里了。个人动态客户端组件,使用的是java.net.Authenticator来设定用户名密码,丢进jvm以后就不用管了,后面正常链接便可。ui
刹那即永恒。因而摧毁上周五一个下午的全部工做量,分分钟写好自定义的Authenticator类,在访问以前把用户名密码丢进去,成功!url
这样就over了。.net
其实不少看似复杂的问题,每每是想得太复杂了。有时候命名你知道的东西,一入牛角尖,万事皆蹉跎。吸收教训,吸收教训。线程