关于Liferay的几个BUG
第一次接触Liferay就对其比较崇拜,老板更是对其赞不绝口,以至于在短短两个月不到的时间里公司研究Liferay的同事已经从零增加 到十几人,对于这个两个月之前我进公司时才六七十号人的公司来说,发展速度惊人。使用过程中,也发现了一些BUG,记录一下以供参考。
Liferay非常实用的portlet
由于最近项目比较忙,这里好几天没有更新了。
Liferay在Tomcat上的布署
没有时间,这还是以前整理的文档,先把英文的放上来。
1. Download Tomcat 5.5.17 from http://tomcat.apache.org/download-55.cgi. You can download the zip or executable file.
2. Setup the executable file or release the zip file in the folder %TOMCAT_HOME%.
3. Create and edit %TOMCAT_HOME%/conf/Catalina/localhost/ROOT.xml to set up the portal web application.
<Context path="%JAVA_WORKSPACE%">
</Context>
4. Download portlet.jar and portal-kernel.jar from http://www.liferay.com/web/guest/downloads.
Create a %TOMCAT_HOME%/common/lib/ext directory and copy these two files there.
5. Edit $TOMCAT_HOME/conf/catalina.properties.
common.loader=${catalina.home}/common/classes,/
.../${catalina.home}/common/lib/ext/*.jar
6. Download mysql-connector-java-{$version}-bin.jar from http://www.mysql.com/products/connector/j/, and copy it to %TOMCAT_HOME%/common/lib/ext.
7. Edit catalina.bat, add the following content into it:
rem ----- Execute The Requested Command ---------------------------------------
set JAVA_OPTS=-Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config
8. Copy the file named xercesImpl.jar into %TOMCAT_HOME%/common/endorsed, this file can be found in the liferay source folder ROOT/WEB-INF/lib.
9. Edit $TOMCAT_HOME/conf/Catalina/localhost/ROOT.xml.
<Context...>
<Resource
name="jdbc/LiferayPool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://%mysql server% /lportal?useUnicode=true&characterEncoding=UTF-8"
username=""
password=""
maxActive="100"
maxIdle="30"
maxWait="10000"
/>
</Context>
10. Create a mail session bound to mail/MailSession.
If you have a mail server already, modify ROOT.xml to point your mail server. Or else, you must setup a mail server first, see 4.4. Replace the mail note with the following contents:
<Resource
name="mail/MailSession"
auth="Container"
type="javax.mail.Session"
mail.transport.protocol="smtp"
mail.smtp.host="Your mail server name"
mail.smtp.auth="true"
mail.smtp.user="Your mail address"
mail.smtp.password="Your password"
/>用Eclipse部署Liferay开发环境
一、
下载eclipse建议装几个比较方便的插件:
1、JSP Edit:
2、Tomcat pluginV31
3、PropEdit3.8.0
4、JSEclipse1.5.2.2
5、ResourceBoundleEditor0.5.4
二、下载liferay-portal-4.1.2.war
1. 将liferay-portal-4.1.2.war解压到ROOT文件下,如d:/code/liferay/ROOT
2. 打开eclipse,选择File->switch workspace,选择d:/code
3. 重新启动eclipse,新建java project: liferay。注意:此处名称与第1点红色部分一样
点击下一步,系统将自动将liferay下面的文件导入,点击“Create new source folder”,新建src文件夹:
选择default output folder为liferay/ROOT/WEB-INF/classes,点击Finish
三、如果你安装了Tomcat pluginV31插件,作如下配置:
1、选择window->preference
2、选择Tomcat根目录:
3、选择JVM Settings:
4、点击“添加”,作以下配置:
-Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=The full path of your tomcat/conf/jaas.config
注意:如果安装其他插件,需要作相应的设置。单独启动tomcat见
http://blog.chinaunix.net/u/25536/showart_208304.html
Liferay源码--配置文件 |
配置文件:
/ROOT/WEB-INF/
web.xml:此配置应该都比较熟悉,里面配置servlet、filter等不多说了
portlet.xml:这是liferay的portlet配置文件,可以用portlet-ext.xml进行扩展,主要子节点解释如下:
portlet-name:唯一值,与liferay-portlet.xml中portlet-name及liferay-display.xml中的<portlet id="xx" />对应,在代码中经常要用到此值。有几个特殊的portlet,如:My Account, Login等,这些在liferay源代码中写固定了,所以最好不要使用这些id.
display-name:portlet显示的名字,一般相应在资源文件中定义一起使用,以支持多国语言。如果资源文件中不定义,可能会显示id。
portlet-class:如果使用struts,则定义为com.liferay.portlet.StrutsPortlet,也可以定义为自己的处理类,如sample-jsp中定义为com.sample.jsp.portlet.JSPPortlet
init-param:portlet的初始页面,value与struts-config.xml配置相对应
security-role-ref:配置角色,角色需在liferay-portlet.xml的role-mapper中定义
liferay-portlet.xml:portlet配置文件,其中struts-path与Struts配置文件相对应,可以用liferay-portlet-ext.xml扩展。
liferay-display.xml:portlet显示控制,没有在此定义的portlet将全部显示在undifine中
struts-config.xml:Struts配置文件,可用struts-config-ext.xml扩展
tiles-defs.xml:Struts配置文件,与struts-config.xml配合使用,可用tiles-difs-ext.xml扩展。
小技巧:以上文件在eclipse中只要把鼠标移到相应的标签上,就会提示标签的作用。
/ROOT/WEB-INF/classes/
log4j.xml:这是lof4j的配置文件,可以参照log4j的相关配置文档进行配置
system.properties:liferay基本配置,如时区,国家,加密类等
portal.properties:非常重要的配置文件,单独讨论。
captcha-ext.properties:验证码配置文件,可以通过此配置文件控制验证码的字体,颜色,大小等
*.hbm.xml:Hibernate配置文件,如与liferay整合,需要在portal.properties中定义hibernate.configs,注意要保留以前的配置
*-spring-professional/enterprise.xml:spring配置文件,此配置文件需要在portal.properties中定义spring.configs,注意要保留以前的配置,在portal.properties 中配置时,需省前后面的版本号professional/enterprise,Liferay会自动在后面加上版本号,如:你使用的是 professional,配置文件名为test-spring-professional.xml,则在spring.configs只需要配置test-spring.xml
language.properties:语言资源文件
Liferay页面缓存
Liferay页面使用缓存,在未登录时,页面只做一次加载,即使对JSP文件修改,页面有时也没法重新加载。但在登录之后,每一个请求每一个页面时都会重新加载。在网上查了很多资料,使用那些方法对一般的JSP页面都有作用,但对Liferay却没有效果。
有一种感觉叫爽
郁闷了很多天了,从接到这个任务开始到今天,时断时停地看了一个多月了,但这边长时间下来一直关注的问题得到解决,那种感觉就一个字,爽!
这不是什么难的问题,主要问题是我没有接触过,又没有别人教,很郁闷,写出来,供遇到同样问题的兄弟们参考。
当前的项目是用Liferay开发,我的问题也就自然离不开Liferay,这玩意儿确实很强,当你深入地看下去,很多人会佩服得五体投地,对于我这样 水平比较菜的,自然是没得说。SSL是进行安全传输的首选,很多网站都是这样,一般都是用在登录认证、注册等涉及个人隐私的环节。通过Tomcat设置, 可以在用户浏览到受保护页面时自动跳转,通过HTTPS进行访问,这个不难实现,也很方便,但Tomcat并没有提供从HTTPS自动跳回HTTP的配置 方法(可能有,但我没有找到),而这也很有必要,因为加密传输需要浪费一些时间,如果因为很少几个环节而让整个网站全部保护显然不合理。我需要根据配置去 保护一些页面,而在其他地方使用正常的HTTP访问。
很多项目采取的方法是另外新建一个工程,专门用于验证、数据提交之类,163及 gmail邮件在登录时应该都是采用的这种方法,登录验证页面通过SSL把验证信息发送到验证模块验证,通过过再把相关验证信息返回,似乎实现并不困难, 但我们的项目提交数据模块是几个单独的portlet,分布在系统的几个地方,如果为这几个portlet去建一个另外的项目,工作量大,而且也不方便。 跟了几天的代码,最终采用filter去解决,在filter中读配置,对需要保护的地址跳转到HTTPS,其他页面再回到HTTP,也就实现了 HTTPS与HTTP的互转。但当我完成这部分工作时发现,登录之后,在跳转的过程中产生了新的session,而原先的登录信息也随着原来的 session变成了孤魂,登录后的操作显然也就无法继续。比较幸运,liferay在mainservlet中保留了登录接口,在发现session中 的userid信息丢失时会去request中找remoteUser,如果这个信息还有,将会进行第二次登录,而这正是SSO(单点登录)所提供的功 能,根据这种思路,在Tomcat中配置了SSO,问题解决了,现在对于HTTPS与HTTP互转都已经能很好的工作。但却带来了另外一个问题,我已经无 法登出了,因为第一个session并没有invalidate,但点击signout时,当前session失效,但由于SSO存在, mainservlet会自动又进行登录,(直到第一个session失效,Liferay设置的timeout为30s)。从网上查了一下资料,我的心 就凉了,单点登出比SSO更难解决!幸运的是这边不是纯粹的SSO,如果signout时能将用户第一个session先invalidate,问题自然 会解决。创建一个SessionListener监测session,并设置一个MAP,将用户对应的session记录,并在signout时从里面读 取,全部invalidate,问题就搞定了。
此时,我用了一个月,很大一部分时间是在走弯路。 幸运的是,最终我解决了这个问题。