1. 程式人生 > 實用技巧 >liferay中jsonws的認證方法

liferay中jsonws的認證方法

參考: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 = new
URL(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編碼的。