记一次webservice使用java连接的basic验证问题的坑

我们做了一个通用型的api平台,给全公司的接口使用。很多接口陆陆续续接入了,还面临一个问题,就是目前的代码对使用basic验证的webservice接口无法验证身份。拥有这方面需求的业务开发团队对我们架构组提出了强烈的呼吁,上周五领导让我做一下,凝练起来就三个字,搞定它

没成想,一开始就钻进了牛角尖,在死胡同了团团转出不来。先是研究wsdl4j的jar,发现没有对basic验证的支持,再研究一遍soapui的jar,发现它仅仅是传入了用户名密码,在实际连接读取wsdl的时候,也没有传入用户名密码。研究了半下午之后,陷入死局,遂展现如下坑逼方案:

1.抽取wsdl4j的代码,自己复写,然后打包放进去。写着写着,发现wsdl4j的类,很多不是final就是protect包范围内可用的,要重新写一遍,类太多了,而且会破坏掉原有的线程安全设置。

2.摧毁上个方案的代码,开始使用ASM字节码改动原始代码,自己实现AOP。后来发现,即使如此,具体连接的时候仍然会扔出来401错误,只不过结果是正确的而已。

3.摧毁第二个方案的代码,重新开始研究soapui的jar。总觉得它使用的方式,一定是java允许的,而且是很方便的方式。发现内部有从url中获取用户名密码的方式,遂各种实验。最后虽成功,但是看着拼接起来带着用户名密码的url,内心总有一种哔了狗的感觉,这无法通过我内心的代码洁癖认证。

周五就这样结束了,带着一脸的懵逼和惆怅,周末带带孩子以求内心安宁。

周一开始了,脑袋焕新,突然想起自己以前写的动态客户端访问webservice组件,遂拉出来鞭尸,以求能找到蛛丝马迹。拖出来自己的代码一看,突然明白了牛角尖钻在哪里了。我的动态客户端组件,使用的是java.net.Authenticator来设定用户名密码,丢进jvm之后就不用管了,后面正常连接即可。

刹那即永恒。于是摧毁上周五一个下午的所有工作量,分分钟写好自定义的Authenticator类,在访问之前把用户名密码丢进去,成功!

这样就over了。

其实很多看似复杂的问题,往往是想得太复杂了。有时候命名你知道的东西,一入牛角尖,万事皆蹉跎。吸取教训,吸取教训。

转载于:https://my.oschina.net/forever9999/blog/2992322

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值