liferay中jsonws的认证方法

2016年08月11日 Liferay 评论 5 条 阅读 19,647 views 次

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 = "test@liferay.com";
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 ="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编码的。

用户头像

5 条留言  访客:4 条  博主:1 条

  1. 如何去掉 Liferay7页面下方的 “由……提供技术支持 Liferay”

  2. 胡大神,这个篇文章中基于java的认证不加这个request头返回java.lang.SecurityException,只要一加上就是400返回码bad request,我用的版本是6.2,这个方法区分版本吗?

给我留言

您必须 登录 才能发表留言!

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号

用户登录

分享到: