JGROUPSPING 清空 加快启动速度
所有频道的参数配置保存在UP_PORTLET_PREF、UP_PORTLET_PREF_VALUES
关闭动态皮肤需要 删除在Page Top folder 中的dynamic-respondr-skin频道
套餐修改后重启服务生效
如何设置一个用户布局模板?如何创建继承布局模板的后续用户帐户?新用户是否自动继承布局模板?或者是否有方法强制新用户继承特定的自定义布局模板吗?
创建模板最简单的方法是使用ant md5passwd创建帐户,然后登录并使用GUI设置您想要的布局。
要映射用户使用的模板,请使用persondir.xml将一些适当的属性映射到uPortalTemplateUserName。用户的登录过程将选择与uPortalTemplateUserName人员属性值匹配的布局模板。
如下:
<uidquery>select first_name||' '||Last_name first_last,
decode(role,'UNDERGRADUATE','student',
'GRAD_STUDENT','student',
'MP', 'staff',
'CT', 'staff',
'CAS', 'staff',
'SM', 'staff',
'FAC_LADDER','faculty',
'FAC_NON-LADDER','faculty',
'VF','faculty',
'FEL','faculty',
'PDA','faculty',
'PDF','faculty',
'proto-user') template,
from portal_person_directory where netid=?</uidquery>
with attribute template mapped like this:
<attribute>
<name>template</name>
<alias>uPortalTemplateUserName</alias>
</attribute>
这将导致sql查询中的“role”值控制模板的选择。
原理:
IUserIdentityStore接口是检索门户中当前用户的惟一标识符的机制。这个interfact只有一个实现:RDBMUserIdentityStore。用户的两个属性以及person属性的值会影响这个类选择模板的方式。
autoCreateUsers属性可以开启或关闭模板行为。
org.jasig.portal.services.Authentication.autoCreateUsers=true
当设置为true时,RDBMUserIdentityStore将根据模板用户自动为新门户用户创建所有必要的数据。如果设置为false,则不会自动创建用户数据。到目前为止,还没有创建用户数据的其他机制,因此该属性始终设置为true。
模板用户值由属性defaultTemplateUserName或目录属性映射到uPortalTemplateUserName来确定。当用户第一次登录时,RDBMUserIdentityStore首先查找名为uPortalTemplateUserName的person属性。该属性的值应该是现有用户的用户名。现有用户就是新用户的模板。如果没有映射该名称的属性,则模板用户名来自属性org.jasig.portal.services.Authentication.defaultTemplateUserName。
org.jasig.portal.services.Authentication.defaultTemplateUserName=demo
这意味着,如果不做任何更改,也不将任何属性映射到uPortalTemplateUserName,那么所有新用户的布局模板都将从用户demo中克隆出来。
模板和布局管理器
Simple layout manager (SLM)通过使用模板来根据person对象中的值向用户交付不同的内容,从而获得强大的功能和灵活性。但是,一旦用户更改了这个或她的布局,就会存储一个副本,并且不再使用模板。因此,除非用户将其布局重置为默认值,否则在用户个性化其布局后对模板所做的任何更改都不会出现。同样地,任何从用户到模板用户的映射变化(例如。一旦用户通过个性化拥有了他或她自己的布局副本,则没有任何效果。由于聚合布局管理器(ALM)和分布式布局管理器(DLM)都具有更好的将内容推送给用户的机制,所以在不使用简单布局管理器时,可以最小化或完全消除模板。
当模板映射发生变化时
任何给定的用户要么1)链接到模板用户,没有自己的布局,要么2)从模板断开链接,使用自己的布局。用户开始时链接到他们的模板用户。通过设置个性化的布局,例如添加、移动或删除一个频道,它们就可以解除链接。在personalization上,uPortal将模板布局内容复制到这个用户的一个新的个人布局中,并且这个用户永远不会与模板“断开”链接(直到并且除非用户重新设置布局)。
如果用户与模板布局没有链接,那么对模板布局内容的更改或对决定用户被映射到哪个模板的用户属性的更改都不会产生任何影响。
如果一个用户被链接到一个模板布局,那么当这个用户的链接模板用户的布局发生变化时,这些变化将反映在用户的感知布局中。由于用户没有自己的布局,所以她使用模板用户的布局,因此在下一次登录时体验更新到该模板。
但是,当用户的模板属性本身发生变化时,例如值从“student”更改为“faculty”,会发生什么情况呢?如果用户链接到模板布局,门户将显示新的模板用户布局(在本例中为faculty),将该用户从她目前所在的所有可修改组中删除,并将该用户放置在与faculty模板用户关联的新组中。但是,如果用户与模板断开了链接,那么对template属性的更改将不会起作用(直到并且除非用户重置了她的布局)。
重申,用户不提供定制他或她的布局,当用户的门户模板属性值发生变化时,门户将新的布局和把用户所有过去的组织,它能(不能修改只读PAGS等团体组),并将该用户到新的组织隶属于新模板的用户,而如果用户修改他或她的布局,从而打破与模板的用户,这样,即使门户模板属性发生了更改,用户也不会收到新的布局,也不会更改组成员关系。
To restate, providing the user does not customize his or her layout, when the user's portal template attribute values changes, the portal will present the new layout and pull the user out of all past groups that it can (cannot modify read-only groups such as PAGS groups) and place this user into the new groups affiliated with the new template user, whereas in the event that a user modifies his or her layout and thereby breaks association with the template user, then even if the portal template attribute changes, the user will not receive a new layout nor will she change group membership.
实现所描述行为的源代码片段
boolean hasSavedLayout = userHasSavedLayout(portalUser.getUserId());
if (!hasSavedLayout) {
TemplateUser templateUser = getTemplateUser(templateName);
if (portalUser.getDefaultUserId() != templateUser.getUserId()) {
//Update user data with new template user's data
updateUser(portalUser.getUserId(), person, templateUser);
}
}
更改模板从属关系将更改组成员身份
protected void updateUser(int userId, IPerson person, TemplateUser templateUser) throws Exception {
// Remove my existing group memberships
IGroupMember me = GroupService.getGroupMember(person.getEntityIdentifier());
Iterator myExistingGroups = me.getContainingGroups();
while (myExistingGroups.hasNext()) {
IEntityGroup eg = (IEntityGroup)myExistingGroups.next();
ILockableEntityGroup leg = GroupService.findLockableGroup(eg.getKey(), me.getKey());
removePersonFromGroup(person, me, leg);
}
// Copy template user's groups memberships
IGroupMember template = GroupService.getEntity(templateUser.getUserName(), Class.forName("org.jasig.portal.security.IPerson"));
Iterator templateGroups = template.getContainingGroups();
while (templateGroups.hasNext()) {
IEntityGroup eg = (IEntityGroup)templateGroups.next();
ILockableEntityGroup leg = GroupService.findLockableGroup(eg.getKey(), me.getKey());
addPersonToGroup(person, me, leg);
}