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 = <b>new</b><b> URL(</b><b>pathUrl</b><b>);</b> HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); String userName = "test@liferay.com"; String password = "test"; String token = userName + ":" + password; String authorString = "Basic " + Base64.<i>encodeBase64String(</i><i>token</i><i>.getBytes</i><i>());</i> 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 ="test@liferay.com"; 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编码的。
转自IT人生录 http://www.huqiwen.com/2016/08/11/liferay-jsonws-authorization/