关于Liferay登录修改

今天修改Liferay的SignIn模块,本以为修改过了SignUp,SignIn应该比较简单,但是因为Liferay原创者比较弱智的编码方式,浪费了我近两个小时的时间,幸运的是最终我还是解决了。
  Liferay大部分参数都采用配置文件去实现,所以二次开发时很多情况下可以通过修改扩展配置文件去实现,这点确实很好,便SignIn 比较特殊,在修改了struts-config-ext.xml后发现,Liferay根本不从我指定的SignInAction走,而是继续走自己的 LoginAction,把代码检查了很多遍,我很确信自己的配置没有错。没办法,只有跟源码了。原来Liferay在Login时 ServicePreAction中调用了ThemeDisplay的setURLSignIn,如下: themeDisplay.setURLSignIn(mainPath + "/portal/login"),因此在配置文件中无论怎么修改都不起作用。没有办法,只能修改原有的struts-config.xml文件了,用自 己的类替换原有的LoginAction,大功告成!
  Liferay中类似的写法还很多,看来Liferay还有很多地方需要改进啊。







关于Liferay的几个BUG
 第一次接触Liferay就对其比较崇拜,老板更是对其赞不绝口,以至于在短短两个月不到的时间里公司研究Liferay的同事已经从零增加 到十几人,对于这个两个月之前我进公司时才六七十号人的公司来说,发展速度惊人。使用过程中,也发现了一些BUG,记录一下以供参考。
  1、struts标签问题
  struts-config.xml中定义的action path,长度三节以上在某些portlet中无法使用,而且由于其引用了liferay-portlet.xml中的struts-path,在程序中 对struts path进行了人为的截取,所以第一节也没有任何意义。如在create_account.jsp页面中,定义form的action如下:
    <portlet:param name="struts_action" value="/ my_account/create_account" />
  红字部分没有任何意义,无论换成什么或者不写都可以。其他地方可能也存在类似的情况。
  2、注册验证码问题
  在注册时需要填验证码,第一次注册时没有问题,但注册后窗口不关,继续第二次注册时,验证码无法显示,必须把窗口关闭后才能看到
  此BUG正在修改中,还没有查到原因。
  3、关于不同浏览器的问题
  一个比较明显的失误,Liferay的JS只对IE支持比较好,其他浏览器访问很多地方会抱错,这是Liferay一个比较大的缺点。如Linux的Navigator。有待改进。
  以后接触过程中可能还会发现一些BUG,将不断更新。










Liferay非常实用的portlet
由于最近项目比较忙,这里好几天没有更新了。
  项目前期开发基本完成,快上线测试了,需要将一些基本内容添加到系统中,因此接触了Journal content,这个portlet功能确实不错,除了提供了很好的页面编辑功能外,对于一般的客户端代码也都可以编辑运行。使用Liferay提供的 Structure,可以实现多国语言支持,非常方便。
   有点缺陷,在添加图片时可能存在一点BUG,有时添加图片服务端会提示companyID为空而报错,不过可以通过另外的途径去加图片,增加 Image Gallery,这个portlet提供了对图片上传的控制,还比较好用。在这边上传后,右击找到上传后图片的ID,在需要引用图片的地方用些ID替换就OK了。









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&amp;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

建议装几个比较方便的插件:

1JSP Edit

2Tomcat pluginV31

3PropEdit3.8.0

4JSEclipse1.5.2.2

5ResourceBoundleEditor0.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 folderliferay/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此配置应该都比较熟悉,里面配置servletfilter等不多说了

portlet.xml这是liferayportlet配置文件,可以用portlet-ext.xml进行扩展,主要子节点解释如下:

portlet-name:唯一值,与liferay-portlet.xmlportlet-nameliferay-display.xml中的<portlet id="xx" />对应,在代码中经常要用到此值。有几个特殊的portlet,如:My Account, Login等,这些在liferay源代码中写固定了,所以最好不要使用这些id.

display-nameportlet显示的名字,一般相应在资源文件中定义一起使用,以支持多国语言。如果资源文件中不定义,可能会显示id

portlet-class:如果使用struts,则定义为com.liferay.portlet.StrutsPortlet,也可以定义为自己的处理类,如sample-jsp中定义为com.sample.jsp.portlet.JSPPortlet

init-paramportlet的初始页面,valuestruts-config.xml配置相对应

security-role-ref:配置角色,角色需在liferay-portlet.xmlrole-mapper中定义

liferay-portlet.xmlportlet配置文件,其中struts-pathStruts配置文件相对应,可以用liferay-portlet-ext.xml扩展。

liferay-display.xmlportlet显示控制,没有在此定义的portlet将全部显示在undifine

struts-config.xmlStruts配置文件,可用struts-config-ext.xml扩展

tiles-defs.xmlStruts配置文件,与struts-config.xml配合使用,可用tiles-difs-ext.xml扩展。

小技巧:以上文件在eclipse中只要把鼠标移到相应的标签上,就会提示标签的作用。

 

/ROOT/WEB-INF/classes/

log4j.xml这是lof4j的配置文件,可以参照log4j的相关配置文档进行配置

 

system.propertiesliferay基本配置,如时区,国家,加密类等

portal.properties非常重要的配置文件,单独讨论。

captcha-ext.properties验证码配置文件,可以通过此配置文件控制验证码的字体,颜色,大小等

*.hbm.xmlHibernate配置文件,如与liferay整合,需要在portal.properties中定义hibernate.configs,注意要保留以前的配置

*-spring-professional/enterprise.xmlspring配置文件,此配置文件需要在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缓存是通过filter实现的,即 com.liferay.portal.servlet.filters.layoutcache.LayoutCacheFilter,在 system.properties中有对应的设置, com.liferay.portal.servlet.filters.layoutcache.LayoutCacheFilter=false,则 每次都有对服务器重新请求。








有一种感觉叫爽
郁闷了很多天了,从接到这个任务开始到今天,时断时停地看了一个多月了,但这边长时间下来一直关注的问题得到解决,那种感觉就一个字,爽!
  这不是什么难的问题,主要问题是我没有接触过,又没有别人教,很郁闷,写出来,供遇到同样问题的兄弟们参考。
   当前的项目是用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,问题就搞定了。
  此时,我用了一个月,很大一部分时间是在走弯路。  幸运的是,最终我解决了这个问题。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值