Liferay新注册用户缺省页面的研究
在Liferay的基础上进行二次开发,我们都比较困惑的一个问题是:如何控制新注册用户登录后的页面?
关于新用户的缺省页面,最核心的代码是在com.liferay.portal.events.ServicePreAction类中的addDefaultLayout(User user)和getDefaultLayout(User user, boolean signedIn)。
12.1 源代码阅读
这部分代码,代码量并不大,大家可以自行阅读一下。代码的意思,大致总结如下:
1、在run()中,判断用户是否有Power User角色,如果有,则调用addDefaultLayout。
2、在addDefaultLayout中,判断用户是否已经有自己的Community,如果没有,就会读取参数default.user.layout.name、default.user.layout.template.id等进行创建,并设置各个column_id的portlet。
3、判断是否已经有自己的Community,实际上是在判断userGroup的Community。
4、然后,在getDefaultLayout获取应该显示的Layout。如果指定了layout,就现实制定的layout;否则,登录用户,检查有权限的私有layout;否则,检查公共layout。
从这个流程可以看出,可以从几个角度来入手解决这个问题:
1、 从用户角色入手,不给新用户Power User角色。
2、 通过配置文件,设置新用户的layout,以及各个column的portlet清单。
3、 大动手术,直接重载ServicePreAction类
12.2 从用户角色着手解决的方案
在Enterprise这个Portlet中,选择"用户"这个Tab,然后是Default Community And Roles,里面,把Power User删掉,并保存。
然后重新注册的用户,缺省就不会创建新的Community。同时,又没有分配其他Community给他,因此他只有一个Guest这个Community是可用的,登陆之后也会回到缺省页面。
这种方案适用于:普通登录用户没有其他的功能,主要还是在Guest这个Community。
www.liferay.com应该就是采用这种处理方式。
考虑到多数情况下,除了公共页面,我们还需要给用户一些私有的页面。这时,我们可以创建一个私有的Community如Blog,在这个Community中创建若干的Layout,并且添加好portlet。作为设计的所有注册用户的缺省登录后的页面。然后,管理员在Enterprise这个Portlet中,选择"用户"这个Tab,然后是Default Community And Roles,里面,在Community这个Textarea里面,输入把Blog这个Community名字,并保存。
这样,新注册的用户,登陆之后,就会显示Blog这个Community。
这个方案的关键设置,就是在Default Community And Roles里面。两点:一、新注册用户缺省没有Power User权限;二、新注册用户,缺省可以访问设置的私有Community。
12.3 从配置文件着手解决的方案
在portal.properties中有几个重要的配置参数,分别是
default.user.layout.name=Home
default.user.layout.template.id=2_columns_ii
default.user.layout.column-1=82,23,61,65,
default.user.layout.column-2=8,11,36,33,
default.user.layout.column-3=
default.user.layout.column-4=
default.user.layout.name,暂时没看其作用,估计没有太大的影响。我们关心的应该是后面两类参数:
default.user.layout.template.id:页面的布局
default.user.layout.column-?:每一个column中有哪些portlet。具体含义,自己开发过Layout的话,就很容易理解。
我们的工作也就相对简单了,只需要定制这两个参数即可。比如,我想在第二栏的最开始,放一个Calculator Portlet,那只需要设置为
default.user.layout.column-2=13,8,11,36,33,
注意:Liferay不建议我们直接修改portal.properties文件,因此需要把这些参数拷贝到portal-ext.properties中进行修改。
这个方法的问题也比较明显:对于哪些需要设置Preference才能正常工作的portlet,这种方法就不好使。比如ID为56的Portlet "Journal Content",是Liferay的使用最频繁的portlet,但这种方法,不能为其设置所选择的文章。这个问题,我没有找到比较好的解决方法。
曾经尝试在配置文件中直接写portlet的实例名,但不成功,仍然是未设置状态。
这个方案适用于:每个用户需要有自己的工作台,并且工作台的内容并不是以内容呈现为主。
12.4 重载ServicePreAction类的方案
这个方案,应该是最灵活的一个方案了,当然对开发技术以及对Liferay的底层知识有较高要求。有兴趣的可以自行研究,我仅简单说说如何重载。
1、 在ext环境中创建一个新类,并派生自ServicePreAction。然后重新实现方法addDefaultLayout(User user)。在里面做自己想做的任何事情。例如新类的全名为com.ext.portal.events.ServicePreExtAction
2、 在portal-ext.properties中添加一行
servlet.service.events.pre=com.ext.portal.events.ServicePreExtAction
Liferay的案例EducaMadrid,"Germinus was able customize the look and feel of the portal according to the user's hierarchal role and/or grade. Teachers have a "desktop" that displayed classroom materials, and students would see more student oriented UI. As the students progressed to higher grades, the actual interface becomes increasingly more complex",我猜测,应该就是采用了重载ServicePreAction的方法,为不同的角色或年级,设置不同的页面样式。
分享到:
相关推荐
liferay学习 liferay页面 Noname2.jsp
liferay 6.2 开发指南+用户手册 官方文档
Liferay Portal Liferay IDE
一个注册用户登录系统后,可以选择访问不同类型的Portal主页。这也是Portal同传统网站所不同的地方。 以test用户登录Liferay Portal系统,鼠标移到右上角的“Welcome Test Test!”处调出菜单。再把鼠标移到“我的...
SSO单点登录,基本上是做门户系统的必备工作之一。当我们用Liferay的时候,缺省已经集成了CAS、OpenID、LDAP、NTLM、OpenSSO等单点登录的解决方案
You do not have permission to view this page
CAS4.2.4 连接Liferay6.2以上版本数据库用户表验证用户 project代码
liferay6.2.1新版sdk依赖jar 为方便限制网络或者网络缓慢用户打包 直接覆盖sdk根目录即可
Liferay门户通过扩展struts的基本类ActionServlet生成自己的MainServlet类,而所有的HTTP或WAP请求都要提交给这个类来处理,以保证能传递给合适的PortletAction来处理。
Liferay Portal额外研究,liferay参考、教程
Liferay跨页面Portlet之间的调用与数据传递,Portlet之间的通信方法有多种,比如PortletSession,Public Render Parameter,Portlet event等。但是这些方法使用起来都很复杂,像Public Render Parameter和event等,...
包括liferay的用户配置,系统接口,包括Liferay Portal 6 企业应用开发,Liferay 用户开发接口,Liferay+in+Action,Liferay 系统开发等
基于Liferay+Portal技术的校园信息门户研究与实现
liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南
liferay 超级学习文档 liferay 框架 java hibernate liferay 不用多说
Liferay中的AUI框架,官方叫做Alloy,是一个UI超框架,能为浏览器的三方面,结构,风格和表现建立网络应用提供连续的简单的API。 它融合了三种设计语言:HTML, CSS 和 JAVA。 准确来说AUI是Liferay在YUI的基础上...
liferay 二次开文档
在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户、组的同步需求非常重要,用来实现签收组的概念,比如指定签收组、会签、抢签都需要用到。 Activiti可以通过自定义实现SessionFactory,...
Liferay Web内容管理指南Liferay
Liferay教程