Liferay 6开发学习(二十八):如何向Liferay中导入用户

当系统开发完成,部署实施上线时,需要初始化大量的用户数据,如果一个个的录入,数据量少时还好,如果数据量比较大,还是让人很崩溃的。此时,我们可以使用Liferay的API进行用户的导入,Liferay本身并没有提供CSV或EXCEL的用户导入方法,需要我们有一定的二次开发。

导入的方法大概有几种:

(注意:本文的说明是基于Liferay6.2.1的版本,其他版本可能稍有差异)

1、LDAP的导入,就是我们在的用户在LDAP中,让Liferay从LDAP中自动导入,这样的方法,可以参考前面的文章《Liferay 6开发学习(二十七):OpenLDAP与Liferay的集成》;

2、我们Liferay中写一个Portlet,调用Liferay的API进行导入。

3、我们在远程或者另外独立的工程中,调用Liferay的WebService接口进行导入。

写Portlet进行导入

只所以要建立一个Portlet,是因为我们在Portlet里面可以方便的调用Liferay的API,新建一个Portlet工程或者添加一个Portlet。调用下面的方法进行添加。

UserServiceUtil.addUser(companyId, autoPassword, password1, password2, autoScreenName, screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds, organizationIds, roleIds, userGroupIds, sendEmail, serviceContext)

说明:

1、添加时请保证使用超级管理员帐号登录,不然会可能会提示权限不足。

2、上面的companyId,可以从上下文件中使用PortalUtil.getCompanyId(request)获取。

3、autoPassword,一般设置为false。为true时,会自动的生成密码。

4、password1,和password2,就是密码,保持一致即可。

5、autoScreenName,一般为false;

6、screenName,屏幕名称,一般是字母和数字的组合,默认不能为全数字,如果要让他支持全数字,可以添加users.screen.name.allow.numeric=true,的配置到Portal-ext.properties文件中。

7、emailAddress,默认邮件地址为必填项,如果用户中没有邮件地址,则可以在后台中添加配置, users.email.address.required=false,设置为邮件地址为非必须。此时emailAddress可以传空值,否则会报错。

8、facebookId,openId等,这些一般没用,我们传值是可以facebookId传0l(facebookId为long类型),openId传"";

9、local,根据具体的情况吧,这个地方来存的是用户的语言项和时区,国内的一般可以使用固定值,或者是从request里面取,PortalUtil.getLocale(request);

10、firstName, middleName, lastName这几个值,很明显。一般是firstName为必值,其他几个可以传空。根据实际情况来传吧。

11、 prefixId, suffixId,前缀和后缀。国内我们一般都不用这些的,传值都传0即可。

12、male:是否是男性,传true或false;

13、birthdayMonth, birthdayDay, birthdayYear:生日的月、日、年,int类型,根据情况传,如果没有,可以传成1,1,1970.

14、jobTitle,职称等,根据情况传,没有的话传“”;

15、 groupIds, organizationIds, roleIds, userGroupIds:long类型的数级,分别为当前用户属于的站点、组织机构、角色、用户组等,如果不需要可以传null,如果有需要传long类型的数级,里面的值为相应的站点ID,组织机构ID等。如果不是以管理员账号登录,此处传值的话(传null不会),可能会出现权限错误。

16、sendEmail,是否给用户发邮件,根据情况来定吧,一般为false。

17、serviceContext,可以从上下文件中取ServiceContext serviceContext = ServiceContextFactory.getInstance(request);

特殊情况

比如现在有一个场景,是我们自己写一个用户的注册界面,又想在这个注册后就关联上相应的站点或组织机构,上面的接口必须要有权限才能添加,如何绕过相应的权限呢?调用下面的这个API。

UserLocalServiceUtil.addUserWithWorkflow(creatorUserId, companyId, autoPassword, password1, password2, autoScreenName, screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds, organizationIds, roleIds, userGroupIds, sendEmail, serviceContext)

这个API和上面的相比多一个参数,也就是第一个参数,创建的用户ID,这里可以传defaultUser.getUserId()。

User defaultUser = UserLocalServiceUtil.getDefaultUser(companyId);

其他的参数和上面的没有差别,用这个方法添加站点等时,不会再要有相应的权限。

远程调用WebService添加

上面的方法只是在我们自己的系统里面添加,但是有时候,我们又需要在外部写一个程序,或者是通过其他的系统调用接口添加用户。

此时,我们可以使用Liferay提供的API接口。http://localhost:8080/api/axis/Portal_UserService?wsdl,这是一个标准的WebService,里面有对应的接口方法添加。其他程序可以基于这样的一个标准的WebService自己写客户端调用添加。如果是Java,我们可以使用Liferay提供的客户端。

1、下载对应版本的客户端,可以在这里找到对应版本的,http://sourceforge.net/projects/lportal/files/Liferay%20Portal/,比如我们的是6.2.1的下载地址为http://downloads.sourceforge.net/project/lportal/Liferay%20Portal/6.2.1%20GA2/liferay-portal-client-6.2-ce-ga2-20140319114139101.zip

2、下载后,解压可以看到有一系列jar包,将这些jar包导入到我们的工程中,可以新建一个Java工程(和Liferay没关系,有没有Liferay环境也没有关系)

3、调用的核心代码如下:里面的参数的传递,参考上面的,基本一样。

帮助

01

02

03

04

05

06

07

08

09

10

11

12

13

14

UserServiceSoapServiceLocator locatorUser = new UserServiceSoapServiceLocator();

ServiceContext serviceContext = new ServiceContext();

try {

UserServiceSoap serviceUser = locatorUser.getPortal_UserService(getURL("Portal_UserService"));

UserSoap userSoap = serviceUser.addUser(10153l, true,"","",false, userName, "", 0l,"","zh_CN", userNike, "", "", 0,0, true, 1, 1, 1970, null,null, null, null, null, false, serviceContext);

serviceUser.updateStatus(userSoap.getUserId(), 0);

serviceUser.updatePassword(userSoap.getUserId(), password, password, false);

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (ServiceException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

}

getURL方法,主要就是拼接了一下Liferay门户的地址,代码示例如下:

帮助

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

private static URL getURL(String serviceName) throws MalformedURLException {

String url = "http://localhost:8080";

String screenName = "test";

String password = "test";

 

int pos = url.indexOf("://");

String protocol = url.substring(0, pos + 3);

String host = url.substring(pos + 3, url.length());

 

StringBuilder sb = new StringBuilder();

sb.append(protocol);

sb.append(screenName);

sb.append(":");

sb.append(password);

sb.append("@");

sb.append(host);

sb.append("/api/axis/");

sb.append(serviceName);

 

return new URL(sb.toString());

}

转载于:https://my.oschina.net/ckaifeng/blog/486224

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值