記一次webservice使用java鏈接的basic驗證問題的坑

咱們作了一個通用型的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

其實不少看似複雜的問題,每每是想得太複雜了。有時候命名你知道的東西,一入牛角尖,萬事皆蹉跎。吸收教訓,吸收教訓。線程

相關文章
相關標籤/搜索