liferay中jsonws的認證方法
阿新 • • 發佈:2020-10-12
參考:http://www.huqiwen.com/2016/08/11/liferay-jsonws-authorization/
Liferay預設提供兩種介面,基於axis的webserivce,訪問地址為:http:/xxx/api/axis
基於jsonws的訪問地址為:http://xxx/api/jsonws。
但是這兩種介面在外部分訪問的時候都是需要認證的,本篇文章介紹如何對jsonws的介面進行認證訪問。
基於Java的認證
示意程式碼如下:
String pathUrl = "http://localhost:8080/api/jsonws/user/get-user-by-id/user-id/20198"; URL url = newURL(pathUrl); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); String userName = "[email protected]"; String password = "test"; String token = userName + ":" + password; String authorString = "Basic " + Base64.encodeBase64String(token.getBytes()); httpConn.setRequestProperty("Authorization",authorString);
上面的重點為:在訪問的時候為http頭資訊,也就是在request header裡面新增一個名稱為Authorization的資訊,內容為Basic+空格+base64編碼(使用者名稱+:+密碼),這樣的結構。
其中將使用者名稱和密碼以冒號連線起來,然後進行base64編碼,JDK中對於base64的編碼方法,不同的JDK(6、7、8)有不同的方法,我上面的示意程式碼是採用的apache codec的庫,這裡只要是進行base64編碼即可,採用哪個庫都無所謂。
基於javascript的認證
$(document).ready(function(){ var username ="[email protected]"; var password ="test"; function auth(user, password) { var tok = user + ':' + password; var hash = btoa(tok); return "Basic " + hash; } $.ajax({ url: 'http://localhost:8080/api/jsonws/user/get-user-by-id/user-id/20198', dataType: "json", type: "get", success: function(data){ alert(data); }, beforeSend: function(xhr){ xhr.setRequestHeader('Authorization',auth(username, password)); }, complete: function(){ }, error: function(){ } }); });
上面的程式碼是示意,實際中可以根據自己的情況進行刪減,方法本質上和java的程式碼沒有本質的區別。都是在request header裡面新增一個名為Authorization的頭資訊,其中btoa方法是JS的內建函式,進行base64編碼的。