- 浏览: 124098 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
Alicus520:
我也想呢,最尽在研究这方面的,不知道楼主是否可以?
图像纹理描述中的共生矩阵 -
凌绿寒绮:
好凄美的爱情故事,爱 就得趁早说出吧
说声我爱你 -
sd2646:
如果用svn过程中出现java.lang.NoClassDef ...
MyEclipse 6下按照SVN插件 -
liuxiang00435057:
??
SWT开发的一个简单的信息管理软件 -
wicker:
有Java代码就好了,呵呵
图像纹理描述中的共生矩阵
portlet.xml
portlet定义描述文件,它描述portlet的类型,支持Mode, preferenes和role等,遵循JSR168标准实现,以便于移植(需要针对性的做一些小改过)。
下面是一个简单的定义:
〈portlet〉
〈portlet-name〉2〈/portlet-name〉
〈display-name〉My Account〈/display-name〉
〈!-- portlet的实现类 --〉
〈portlet-class〉com.liferay.portlet.StrutsPortlet〈/portlet-class〉
〈init-param〉
〈name〉view-action〈/name〉
〈value〉/my_account/view〈/value〉
〈/init-param〉
〈expiration-cache〉0〈/expiration-cache〉
〈supports〉
〈mime-type〉text/html〈/mime-type〉
〈/supports〉
〈resource-bundle〉com.liferay.portlet.StrutsResourceBundle〈/resource-bundle〉
〈/portlet〉
在JSR168标准中,定义了view/edit/help三种模式,
liferay对其进行了扩展,增加了config/about/preview/print等模式。
liferay-portlet.xml
liferay的portlet定义描述文件,是liferay对portlet.xml的扩展描述,允许我们对portlet的呈现、功能和行为进行更深入的定制。
它与com.liferay.portal.model.Portlet类对应,
下面是一个较为详细的liferay-portlet定义:
〈portlet〉
〈portlet-name〉19〈/portlet-name〉
〈!-- struts路径 --〉
〈struts-path〉message_boards〈/struts-path〉
〈!-- 配置路径 --〉
〈configuration-path〉/message_boards/edit_configuration〈/configuration-path〉
〈!-- lucene索引类 --〉
〈indexer-class〉com.liferay.portlet.messageboards.util.Indexer〈/indexer-class〉
〈!-- url处理类 --〉
〈portlet-url-class〉com.liferay.portlet.messageboards.MBFriendlyPortletURL〈/portlet-url-class〉
〈!-- 友好url插件类 --〉
〈friendly-url-plugin-class〉 com.liferay.portlet.messageboards.MBFriendlyURLPortletPlugin〈/friendly- url-plugin-class〉
〈preferences-unique-per-layout〉false〈/preferences-unique-per-layout〉
〈use-default-template〉false〈/use-default-template〉
〈restore-current-view〉false〈/restore-current-view〉
〈private-request-attributes〉false〈/private-request-attributes〉
〈/portlet〉
portlet类中常用的属性:
// strtus 路径,对portlet的请求应该限制在这个路径下
private String _strutsPath;
// 配置路径,即action定义
private String _configurationPath;
// portlet实现类
private String _portletClass;
// lucene索引类
private String _indexerClass;
// scheduler类
private String _schedulerClass;
// portletURL处理类
private String _portletURLClass;
// friendURL插件
private String _friendlyURLPluginClass;
// 默认的preferences
private String _defaultPreferences;
// preferences的验证类
private String _prefsValidator;
// 是否实例化,为true时可添加多个portlet到layout上
private boolean _instanceable;
// 是否为系统portlet,
private boolean _system;
// 初始化参数
private Map _initParams;
// portlet支持的模式
private Map _portletModes;
// portlet支持的语言
private Set _supportedLocales;
// PortletInfo
private PortletInfo _portletInfo;
// 是否静态portlet, 静态portlet不能移动.
private boolean _staticPortlet;
// 是否为开始的静态portlet.
private boolean _staticPortletStart;
portlet解析
com.liferay.portal.service.impl.PortletLocalServiceImpl
public void initEAR(String[] xmls) {
String scpId = PortletServiceImpl.class.getName() + "." + _SHARED_KEY;
Map portletsPool = (Map)SimpleCachePool.get(scpId);
if (portletsPool == null) {
portletsPool = CollectionFactory.getSyncHashMap();
SimpleCachePool.put(scpId, portletsPool);
}
try {
List servletURLPatterns = _readWebXML(xmls[4]);
Set portletIds =
_readPortletXML(xmls[0], portletsPool, servletURLPatterns);
portletIds.addAll(
_readPortletXML(xmls[1], portletsPool, servletURLPatterns));
Set liferayPortletIds =
_readLiferayPortletXML(xmls[2], portletsPool);
liferayPortletIds.addAll(
_readLiferayPortletXML(xmls[3], portletsPool));
// Check for missing entries in liferay-portlet.xml
// 检查在liferay-portlet中丢失的portlet实体...
// Remove portlets that should not be included
// 移去不应该包括的portlet实体...
}
catch (Exception e) {
_log.error(StackTraceUtil.getStackTrace(e));
}
}
// 解析portlet.xml
private Set _readPortletXML(
String servletContextName, String xml, Map portletsPool,
List servletURLPatterns)
throws DocumentException, IOException {
Set portletIds = new HashSet();
if (xml == null) {
return portletIds;
}
SAXReader reader = SAXReaderFactory.getInstance();
Document doc = reader.read(new StringReader(xml));
Element root = doc.getRootElement();
Set userAttributes = new HashSet();
Iterator itr1 = root.elements("user-attribute").iterator();
// 用户属性处理...
itr1 = root.elements("portlet").iterator();
while (itr1.hasNext()) {
Element portlet = (Element)itr1.next();
String portletId = portlet.elementText("portlet-name");
if (servletContextName != null) {
portletId =
portletId + Portlet.WAR_SEPARATOR + servletContextName;
}
portletId = PortalUtil.getJsSafePortletName(portletId);
if (_log.isDebugEnabled()) {
_log.debug("Reading portlet " + portletId);
}
portletIds.add(portletId);
Portlet portletModel = (Portlet)portletsPool.get(portletId);
if (portletModel == null) {
portletModel = new Portlet(
new PortletPK(portletId, _SHARED_KEY));
portletsPool.put(portletId, portletModel);
}
if (servletContextName != null) {
portletModel.setWARFile(true);
}
if (servletURLPatterns != null) {
portletModel.setServletURLPatterns(servletURLPatterns);
}
portletModel.setPortletClass(portlet.elementText("portlet-class"));
Iterator itr2 = portlet.elements("init-param").iterator();
// 初始化参数处理...
Element expirationCache = portlet.element("expiration-cache");
// cache过期处理...
itr2 = portlet.elements("supports").iterator();
// 支持模式处理...
Set supportedLocales = portletModel.getSupportedLocales();
// 支持语言处理...
// 资源
portletModel.setResourceBundle(
portlet.elementText("resource-bundle"));
Element portletInfo = portlet.element("portlet-info");
// portlet-info处理...
Element portletPreferences = portlet.element("portlet-preferences");
// preferences处理...
Set unlikedRoles = portletModel.getUnlinkedRoles();
itr2 = portlet.elements("security-role-ref").iterator();
// role处理...
portletModel.getUserAttributes().addAll(userAttributes);
}
return portletIds;
}
// 解析liferay-portlet.xml
private Set _readLiferayPortletXML(
String servletContextName, String xml, Map portletsPool)
throws DocumentException, IOException {
Set liferayPortletIds = new HashSet();
if (xml == null) {
return liferayPortletIds;
}
SAXReader reader = SAXReaderFactory.getInstance();
Document doc = reader.read(new StringReader(xml));
Element root = doc.getRootElement();
Map roleMappers = new HashMap();
Iterator itr1 = root.elements("role-mapper").iterator();
// role-mapper处理...
Map customUserAttributes = new HashMap();
itr1 = root.elements("custom-user-attribute").iterator();
// 定制用户属性处理...
Map friendlyURLPlugins = _getFriendlyURLPlugins();
itr1 = root.elements("portlet").iterator();
while (itr1.hasNext()) {
Element portlet = (Element)itr1.next();
String portletId = portlet.elementText("portlet-name");
if (servletContextName != null) {
portletId =
portletId + Portlet.WAR_SEPARATOR + servletContextName;
}
portletId = PortalUtil.getJsSafePortletName(portletId);
if (_log.isDebugEnabled()) {
_log.debug("Reading portlet extension " + portletId);
}
liferayPortletIds.add(portletId);
Portlet portletModel = (Portlet)portletsPool.get(portletId);
if (portletModel != null) {
// 设置portlet属性...
// 处理FriendURL插件
portletModel.setFriendlyURLPluginClass(GetterUtil.getString(
portlet.elementText("friendly-url-plugin-class"),
portletModel.getFriendlyURLPluginClass()));
if (Validator.isNull(
portletModel.getFriendlyURLPluginClass())) {
friendlyURLPlugins.remove(portletId);
}
else {
friendlyURLPlugins.put(
portletId, portletModel.getFriendlyURLPluginClass());
}
// 绑定role.
portletModel.getRoleMappers().putAll(roleMappers);
portletModel.linkRoles();
portletModel.getCustomUserAttributes().putAll(
customUserAttributes);
}
}
return liferayPortletIds;
}
从上面的代码可看出,liferay将portlet的描述定义存储在一个Map中.
liferay-display.xml
portlet的类别定义文件,下面是一个简单的例子:
〈category name="category.admin"〉
〈portlet id="9" /〉
〈portlet id="40" /〉
〈portlet id="79" /〉
〈portlet id="80" /〉
〈/category〉
要注意的是,在portlet.xml/liferay-portlet.xml/liferay-display.xml三个文件中的portlet-name, portlet-id必须是一致的。
liferay-layout-templates.xml
layout模板定义文件.
liferay-look-and-feel.xml
主题定义文件.
portlet的web.xml
如果以war的方式发布portlet,那么它的web.xml也要进行一些特定的说明,
下面是liferay中sample-jsp-portlet示例的web.xml:
〈web-app〉
〈display-name〉sample-jsp-portlet〈/display-name〉
〈context-param〉
〈param-name〉company_id〈/param-name〉
〈param-value〉liferay.com〈/param-value〉
〈/context-param〉
〈listener〉
〈listener-class〉com.liferay.portal.kernel.servlet.PortletContextListener〈/listener-class〉
〈/listener〉
〈servlet〉
〈servlet-name〉sample_jsp_portlet〈/servlet-name〉
〈servlet-class〉com.liferay.portal.kernel.servlet.PortletServlet〈/servlet-class〉
〈init-param〉
〈param-name〉portlet-class〈/param-name〉
〈param-value〉com.sample.jsp.portlet.JSPPortlet〈/param-value〉
〈/init-param〉
〈load-on-startup〉0〈/load-on-startup〉
〈/servlet〉
〈servlet-mapping〉
〈servlet-name〉sample_jsp_portlet〈/servlet-name〉
〈url-pattern〉/sample_jsp_portlet/*〈/url-pattern〉
〈/servlet-mapping〉
〈taglib〉
〈taglib-uri〉http://java.sun.com/portlet〈/taglib-uri〉
〈taglib-location〉/WEB-INF/tld/liferay-portlet.tld〈/taglib-location〉
〈/taglib〉
〈/web-app〉
上面的listener是必须的,它用于通知liferay进行热部署,
portlet-class指定Portlet的实现类,它必须遵循JSR168标准,直接或间接的从javax.portlet.GenericPortlet继承。
portlet定义描述文件,它描述portlet的类型,支持Mode, preferenes和role等,遵循JSR168标准实现,以便于移植(需要针对性的做一些小改过)。
下面是一个简单的定义:
〈portlet〉
〈portlet-name〉2〈/portlet-name〉
〈display-name〉My Account〈/display-name〉
〈!-- portlet的实现类 --〉
〈portlet-class〉com.liferay.portlet.StrutsPortlet〈/portlet-class〉
〈init-param〉
〈name〉view-action〈/name〉
〈value〉/my_account/view〈/value〉
〈/init-param〉
〈expiration-cache〉0〈/expiration-cache〉
〈supports〉
〈mime-type〉text/html〈/mime-type〉
〈/supports〉
〈resource-bundle〉com.liferay.portlet.StrutsResourceBundle〈/resource-bundle〉
〈/portlet〉
在JSR168标准中,定义了view/edit/help三种模式,
liferay对其进行了扩展,增加了config/about/preview/print等模式。
liferay-portlet.xml
liferay的portlet定义描述文件,是liferay对portlet.xml的扩展描述,允许我们对portlet的呈现、功能和行为进行更深入的定制。
它与com.liferay.portal.model.Portlet类对应,
下面是一个较为详细的liferay-portlet定义:
〈portlet〉
〈portlet-name〉19〈/portlet-name〉
〈!-- struts路径 --〉
〈struts-path〉message_boards〈/struts-path〉
〈!-- 配置路径 --〉
〈configuration-path〉/message_boards/edit_configuration〈/configuration-path〉
〈!-- lucene索引类 --〉
〈indexer-class〉com.liferay.portlet.messageboards.util.Indexer〈/indexer-class〉
〈!-- url处理类 --〉
〈portlet-url-class〉com.liferay.portlet.messageboards.MBFriendlyPortletURL〈/portlet-url-class〉
〈!-- 友好url插件类 --〉
〈friendly-url-plugin-class〉 com.liferay.portlet.messageboards.MBFriendlyURLPortletPlugin〈/friendly- url-plugin-class〉
〈preferences-unique-per-layout〉false〈/preferences-unique-per-layout〉
〈use-default-template〉false〈/use-default-template〉
〈restore-current-view〉false〈/restore-current-view〉
〈private-request-attributes〉false〈/private-request-attributes〉
〈/portlet〉
portlet类中常用的属性:
// strtus 路径,对portlet的请求应该限制在这个路径下
private String _strutsPath;
// 配置路径,即action定义
private String _configurationPath;
// portlet实现类
private String _portletClass;
// lucene索引类
private String _indexerClass;
// scheduler类
private String _schedulerClass;
// portletURL处理类
private String _portletURLClass;
// friendURL插件
private String _friendlyURLPluginClass;
// 默认的preferences
private String _defaultPreferences;
// preferences的验证类
private String _prefsValidator;
// 是否实例化,为true时可添加多个portlet到layout上
private boolean _instanceable;
// 是否为系统portlet,
private boolean _system;
// 初始化参数
private Map _initParams;
// portlet支持的模式
private Map _portletModes;
// portlet支持的语言
private Set _supportedLocales;
// PortletInfo
private PortletInfo _portletInfo;
// 是否静态portlet, 静态portlet不能移动.
private boolean _staticPortlet;
// 是否为开始的静态portlet.
private boolean _staticPortletStart;
portlet解析
com.liferay.portal.service.impl.PortletLocalServiceImpl
public void initEAR(String[] xmls) {
String scpId = PortletServiceImpl.class.getName() + "." + _SHARED_KEY;
Map portletsPool = (Map)SimpleCachePool.get(scpId);
if (portletsPool == null) {
portletsPool = CollectionFactory.getSyncHashMap();
SimpleCachePool.put(scpId, portletsPool);
}
try {
List servletURLPatterns = _readWebXML(xmls[4]);
Set portletIds =
_readPortletXML(xmls[0], portletsPool, servletURLPatterns);
portletIds.addAll(
_readPortletXML(xmls[1], portletsPool, servletURLPatterns));
Set liferayPortletIds =
_readLiferayPortletXML(xmls[2], portletsPool);
liferayPortletIds.addAll(
_readLiferayPortletXML(xmls[3], portletsPool));
// Check for missing entries in liferay-portlet.xml
// 检查在liferay-portlet中丢失的portlet实体...
// Remove portlets that should not be included
// 移去不应该包括的portlet实体...
}
catch (Exception e) {
_log.error(StackTraceUtil.getStackTrace(e));
}
}
// 解析portlet.xml
private Set _readPortletXML(
String servletContextName, String xml, Map portletsPool,
List servletURLPatterns)
throws DocumentException, IOException {
Set portletIds = new HashSet();
if (xml == null) {
return portletIds;
}
SAXReader reader = SAXReaderFactory.getInstance();
Document doc = reader.read(new StringReader(xml));
Element root = doc.getRootElement();
Set userAttributes = new HashSet();
Iterator itr1 = root.elements("user-attribute").iterator();
// 用户属性处理...
itr1 = root.elements("portlet").iterator();
while (itr1.hasNext()) {
Element portlet = (Element)itr1.next();
String portletId = portlet.elementText("portlet-name");
if (servletContextName != null) {
portletId =
portletId + Portlet.WAR_SEPARATOR + servletContextName;
}
portletId = PortalUtil.getJsSafePortletName(portletId);
if (_log.isDebugEnabled()) {
_log.debug("Reading portlet " + portletId);
}
portletIds.add(portletId);
Portlet portletModel = (Portlet)portletsPool.get(portletId);
if (portletModel == null) {
portletModel = new Portlet(
new PortletPK(portletId, _SHARED_KEY));
portletsPool.put(portletId, portletModel);
}
if (servletContextName != null) {
portletModel.setWARFile(true);
}
if (servletURLPatterns != null) {
portletModel.setServletURLPatterns(servletURLPatterns);
}
portletModel.setPortletClass(portlet.elementText("portlet-class"));
Iterator itr2 = portlet.elements("init-param").iterator();
// 初始化参数处理...
Element expirationCache = portlet.element("expiration-cache");
// cache过期处理...
itr2 = portlet.elements("supports").iterator();
// 支持模式处理...
Set supportedLocales = portletModel.getSupportedLocales();
// 支持语言处理...
// 资源
portletModel.setResourceBundle(
portlet.elementText("resource-bundle"));
Element portletInfo = portlet.element("portlet-info");
// portlet-info处理...
Element portletPreferences = portlet.element("portlet-preferences");
// preferences处理...
Set unlikedRoles = portletModel.getUnlinkedRoles();
itr2 = portlet.elements("security-role-ref").iterator();
// role处理...
portletModel.getUserAttributes().addAll(userAttributes);
}
return portletIds;
}
// 解析liferay-portlet.xml
private Set _readLiferayPortletXML(
String servletContextName, String xml, Map portletsPool)
throws DocumentException, IOException {
Set liferayPortletIds = new HashSet();
if (xml == null) {
return liferayPortletIds;
}
SAXReader reader = SAXReaderFactory.getInstance();
Document doc = reader.read(new StringReader(xml));
Element root = doc.getRootElement();
Map roleMappers = new HashMap();
Iterator itr1 = root.elements("role-mapper").iterator();
// role-mapper处理...
Map customUserAttributes = new HashMap();
itr1 = root.elements("custom-user-attribute").iterator();
// 定制用户属性处理...
Map friendlyURLPlugins = _getFriendlyURLPlugins();
itr1 = root.elements("portlet").iterator();
while (itr1.hasNext()) {
Element portlet = (Element)itr1.next();
String portletId = portlet.elementText("portlet-name");
if (servletContextName != null) {
portletId =
portletId + Portlet.WAR_SEPARATOR + servletContextName;
}
portletId = PortalUtil.getJsSafePortletName(portletId);
if (_log.isDebugEnabled()) {
_log.debug("Reading portlet extension " + portletId);
}
liferayPortletIds.add(portletId);
Portlet portletModel = (Portlet)portletsPool.get(portletId);
if (portletModel != null) {
// 设置portlet属性...
// 处理FriendURL插件
portletModel.setFriendlyURLPluginClass(GetterUtil.getString(
portlet.elementText("friendly-url-plugin-class"),
portletModel.getFriendlyURLPluginClass()));
if (Validator.isNull(
portletModel.getFriendlyURLPluginClass())) {
friendlyURLPlugins.remove(portletId);
}
else {
friendlyURLPlugins.put(
portletId, portletModel.getFriendlyURLPluginClass());
}
// 绑定role.
portletModel.getRoleMappers().putAll(roleMappers);
portletModel.linkRoles();
portletModel.getCustomUserAttributes().putAll(
customUserAttributes);
}
}
return liferayPortletIds;
}
从上面的代码可看出,liferay将portlet的描述定义存储在一个Map中.
liferay-display.xml
portlet的类别定义文件,下面是一个简单的例子:
〈category name="category.admin"〉
〈portlet id="9" /〉
〈portlet id="40" /〉
〈portlet id="79" /〉
〈portlet id="80" /〉
〈/category〉
要注意的是,在portlet.xml/liferay-portlet.xml/liferay-display.xml三个文件中的portlet-name, portlet-id必须是一致的。
liferay-layout-templates.xml
layout模板定义文件.
liferay-look-and-feel.xml
主题定义文件.
portlet的web.xml
如果以war的方式发布portlet,那么它的web.xml也要进行一些特定的说明,
下面是liferay中sample-jsp-portlet示例的web.xml:
〈web-app〉
〈display-name〉sample-jsp-portlet〈/display-name〉
〈context-param〉
〈param-name〉company_id〈/param-name〉
〈param-value〉liferay.com〈/param-value〉
〈/context-param〉
〈listener〉
〈listener-class〉com.liferay.portal.kernel.servlet.PortletContextListener〈/listener-class〉
〈/listener〉
〈servlet〉
〈servlet-name〉sample_jsp_portlet〈/servlet-name〉
〈servlet-class〉com.liferay.portal.kernel.servlet.PortletServlet〈/servlet-class〉
〈init-param〉
〈param-name〉portlet-class〈/param-name〉
〈param-value〉com.sample.jsp.portlet.JSPPortlet〈/param-value〉
〈/init-param〉
〈load-on-startup〉0〈/load-on-startup〉
〈/servlet〉
〈servlet-mapping〉
〈servlet-name〉sample_jsp_portlet〈/servlet-name〉
〈url-pattern〉/sample_jsp_portlet/*〈/url-pattern〉
〈/servlet-mapping〉
〈taglib〉
〈taglib-uri〉http://java.sun.com/portlet〈/taglib-uri〉
〈taglib-location〉/WEB-INF/tld/liferay-portlet.tld〈/taglib-location〉
〈/taglib〉
〈/web-app〉
上面的listener是必须的,它用于通知liferay进行热部署,
portlet-class指定Portlet的实现类,它必须遵循JSR168标准,直接或间接的从javax.portlet.GenericPortlet继承。
发表评论
-
再望Sun的背影
2010-02-06 00:41 0这是在运营公司,不 ... -
被FCKeditor给弄的快疯掉了!!
2008-04-14 14:44 916FCKEditor显示在页面上总是只有一个TextArea,折 ... -
SWT的Table对单元格添加可编辑属性
2008-04-09 22:02 13515首先是初始化Display , shell ,然后建立tabl ... -
JVM_8080 Already In use 暴力解决方法
2008-04-09 18:57 1690在Myeclipse中启动tomcat报错: JVM——808 ... -
SWT开发的一个简单的信息管理软件
2008-04-07 21:35 1777花了两天时间做了个简单的信息管理软件,界面开发采用了SWT,之 ... -
jar命令加入Main-Class描述
2008-04-03 15:58 5586想在Jar包的Manifest文件中加入Main-Class描 ... -
Spring2.5中可以用Annotation代替xml配置bean了
2008-04-02 13:28 2142xml配置文件中bean的定义可以去掉了,xml配置主要内容如 ... -
Hibernae+Spring+Annotation 的一个Demo
2008-04-02 13:00 18601,今天在用Annotation+Hibern ... -
使用Myeclipse的一个小技巧
2008-04-01 12:55 1654用Eclipse开发的过程中,经常用到的一个功能就是为一个新建 ... -
Hibernate Step By Step (2)
2008-03-31 18:59 1113考虑把通过xxx.hbm.xml转换为用Annotation从 ... -
hibernate Step By Step (1)
2008-03-31 13:27 1018Hibernate的第一个例子,用hibernate3.0 ... -
MyEclipse 6下按照SVN插件
2008-03-31 10:02 8988我也是按照一般的步骤安装SVN插件:解压——Copy plu ... -
hibernate中所需要的各 jar
2008-03-21 22:00 1494hibernate3.jar 编译hibernate所必须的 ... -
学习Hibernate和Spring ing...
2008-03-21 21:55 858团队信息平台的项目打算用到Hibernate+Spring ... -
Ajax4jsf开发的Helloworld
2008-03-20 08:11 1195学习ajax4jsf+myfaces ,今天写了个简单的Hel ...
相关推荐
这一步骤是为了让系统能够读取到配置文件中的属性值,进而根据这些值进行后续的权限控制设置。 ```xml <param-name>portlet_properties <param-value>library-portlet.properties ``` 2. **配置语言和权限...
1. 确保 `system.properties` 文件中的 `user.country=US` 和 `user.language=en` 设置正确。 2. 使用最新版本的 Oracle JDBC 驱动 ojdbc14.jar 和 orai18n.jar。 完成以上步骤后,启动 Liferay 服务,通过运行 `/...
7. **配置文档**:提供的 "Liferay_cas.docx" 文件很可能是详细记录了整个集成过程的步骤和配置细节的文档,可能包含了如何安装和配置 CAS 服务器,如何在 Liferay 中配置 CAS 插件,以及如何配置 LDAP 连接器等内容...
配置文件包括portal.properties、portlet.properties、liferay.properties等。 * Liferay 配置文件的种类 + portal.properties + portlet.properties + liferay.properties * Liferay 配置文件的作用 + 管理...
- **配置数据库连接**:在Liferay的`portal-ext.properties`配置文件中,指定MySQL数据库的连接信息,包括URL、用户名和密码。 - **数据库驱动**:确保你的项目包含MySQL JDBC驱动(如mysql-connector-java.jar)...
这份"liferay开发配置资料(全)"压缩包包含了全面的Liferay开发和配置相关的资源,对于学习和掌握Liferay的使用、定制以及扩展非常有帮助。 首先,Liferay Portal的基础知识是必不可少的。Liferay Portal的核心...
- 数据库连接信息应妥善保管,不建议直接在配置文件中写明明文密码。 - 考虑使用更复杂的身份验证策略,如两步验证或多因素认证,以增加安全性。 完成上述步骤后,你将拥有一个使用Liferay 5.2.3和CAS 3.0.5实现...
在 Liferay 与 CAS 集成的过程中,关键在于正确配置 CAS 服务器和 Liferay 的相关配置文件,确保两者之间的通信顺畅。通过这种方式,用户只需要一次登录即可访问所有集成的应用,提升了用户体验并强化了安全性。在...
在 Liferay 中,`portal.properties` 文件是一个至关重要的配置文件,它定义了系统的全局属性和行为。对于 Liferay 6.0.5 版本,理解并熟练掌握 `portal.properties` 文件的配置至关重要,因为它直接影响到平台的...
新建Liferay的DB,然后将该文件导入该DB后,即可创建Liferay所需要的Table,并insert提供的初始值。
这涉及到在Liferay的`portal-ext.properties`文件中配置LDAP连接参数,如服务器地址、端口、用户名和密码,以及搜索和同步用户的配置。 - **LDAP配置**: - 配置 LDAP 连接信息,包括URL、端口、基础DN...
5. **开发工具**:例如Maven配置文件、Eclipse或IntelliJ IDEA插件、部署脚本等,简化开发和部署流程。 6. **插件或模块**:预编译好的Liferay插件或模块,可以直接导入到项目中使用,提高开发效率。 对于想要深入...
在Liferay的`portlet.xml`配置文件中,指定WAR文件的路径,以便Liferay能够正确地部署和加载它。 6. **测试与调试**:在Liferay Portal上部署GWT应用,确保所有功能正常工作。GWT提供了强大的本地开发服务器,可以...
根据给定的文件信息,以下是对"Liferay应用安全配置手册"相关知识点的详细解析: ### Liferay应用安全配置手册概览 #### 编写目的 该手册旨在为项目团队提供全面的指南,涵盖应用安全的基本配置流程,确保系统的...
在本篇文章中,我们将深入探讨如何进行Liferay集群的负载均衡配置。” 【标签】:“源码” - 暗示可能涉及到对Liferay核心代码的理解或定制;“工具” - 可能会介绍用于集群和负载均衡的相关工具。 【正文】: 在...
3. **整合过程**:Liferay与Struts的整合涉及到配置多个文件,包括Liferay的部署描述符(liferay-plugin.xml)、Struts的配置文件(struts-config.xml)以及portlet的web.xml。在liferay-plugin.xml中声明portlet,...
【Liferay工作流简要配置】是关于Liferay Portal中集成的工作流引擎Kaleo的配置和使用介绍。Kaleo工作流系统提供了一种强大的工具,让用户能够自定义和管理复杂的业务流程,通过门户界面进行部署和监控。以下是详细...
Liferay是一款开源的企业级门户平台,它...通过上述文件和这些知识点的学习,我们可以全面掌握Liferay的使用和开发,无论你是新手还是经验丰富的开发者,都能从中受益匪浅,提升你在企业级门户解决方案中的专业能力。