Liferay:如何在servlet中获取当前登录用户的详细信息?

时间:2015-04-20 11:32:20

标签: servlets liferay-6 orbeon

我对Liferay来说是全新的。我使用代理Portlet 在Liferay中配置了 Orbeon Forms ,最后我创建了一个Orbeon表单并将表单数据发送到演示portlet(自定义portlet)。在portlet中我创建了一个servlet。如果用户保存了orbeon表单数据,那么我的servlet就会被调用,并且我能够获取表单数据。现在我需要在servlet中获取当前用户名或用户ID。

在表单构建器中,我已将orbeon表单数据发送到我的servlet。

属性 - 那个local.xml

    <property
  as="xs:string"
  name="oxf.fr.detail.process.send.*.*"
  value='require-valid
         then send(uri = "http://localhost:9090/FRunner-portlet/html/jsp/formData.jsp?username={xxf:get-request-header('Orbeon-Username')}", method="POST", content="metadata")
                 then success-message("save-success")
                 recover error-message("database-error")'/>

如果我尝试上面的代码,我会收到以下错误,

SEVERE: Exception sending context initialized event to listener instance of class org.orbeon.oxf.webapp.OrbeonServletContextListener
javax.servlet.ServletException: org.orbeon.oxf.common.ValidationException: line 80, column 122 of oxf:/config/properties-local.xml: Fatal error: Element type "property" must be followed by either attribute specifications, ">" or "/>".
        at org.orbeon.oxf.webapp.OrbeonServletContextListener$$anonfun$contextInitialized$2.apply(OrbeonServletContextListener.scala:39)
        at org.orbeon.oxf.webapp.OrbeonServletContextListener$$anonfun$contextInitialized$2.apply(OrbeonServletContextListener.scala:39)
        at org.orbeon.oxf.util.ScalaUtils$.withRootException(ScalaUtils.scala:87)
        at org.orbeon.oxf.webapp.OrbeonServletContextListener.contextInitialized(OrbeonServletContextListener.scala:39)


Caused by: org.orbeon.oxf.common.ValidationException: line 80, column 122 of oxf:/config/properties-local.xml: Fatal error: Element type "property" must be followed by either attribute specifications, ">" or "/>".
        at org.orbeon.oxf.xml.XMLParsing$ErrorHandler.fatalError(XMLParsing.java:215)
        at orbeon.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
        at orbeon.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
        at orbeon.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
        at orbeon.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
        at orbeon.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)


SEVERE: Exception sending context destroyed event to listener instance of class org.orbeon.oxf.webapp.OrbeonServletContextListener
javax.servlet.ServletException: java.lang.NullPointerException
        at org.orbeon.oxf.webapp.OrbeonServletContextListener$$anonfun$contextDestroyed$2.apply(OrbeonServletContextListener.scala:44)
        at org.orbeon.oxf.webapp.OrbeonServletContextListener$$anonfun$contextDestroyed$2.apply(OrbeonServletContextListener.scala:44)
        at org.orbeon.oxf.util.ScalaUtils$.withRootException(ScalaUtils.scala:87)
        at org.orbeon.oxf.webapp.OrbeonServletContextListener.contextDestroyed(OrbeonServletContextListener.scala:44)
        at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4819)
        at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5466)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)


Caused by: java.lang.NullPointerException
        at org.orbeon.oxf.pipeline.InitUtils$.org$orbeon$oxf$pipeline$InitUtils$$fromProperty$1(InitUtils.scala:195)
        at org.orbeon.oxf.pipeline.InitUtils$.processorDefinitions$lzycompute(InitUtils.scala:196)
        at org.orbeon.oxf.pipeline.InitUtils$.processorDefinitions(InitUtils.scala:179)
        at org.orbeon.oxf.webapp.Orbeon$.initialize(Orbeon.scala:84)
        at org.orbeon.oxf.webapp.OrbeonWebApp$$anonfun$1.apply(WebAppContext.scala:117)
        at org.orbeon.oxf.webapp.OrbeonWebApp$$anonfun$1.apply(WebAppContext.scala:117)
        at scala.collection.mutable.MapLike$class.getOrElseUpdate(MapLike.scala:189)
        at org.orbeon.oxf.webapp.ParametersAndAttributes$$anon$1.getOrElseUpdate(WebAppContext.scala:93)
        at org.orbeon.oxf.webapp.OrbeonWebApp$class.$init$(WebAppContext.scala:117)

更新

xxf:get-request-header('orbeon-liferay-user-email')

通过上述声明,我可以获得liferay登录用户邮件ID。现在我需要将此用户名作为参数传递给我的portlet。你能否告诉我将mailid传递给我的portlet的过程是什么?我尝试过不同的方式,但事实并非如此。请建议我将liferay用户邮件ID发送到我的portlet。

FormData Servlet代码

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();                        
    try {                       
        DataInputStream in = new DataInputStream (request.getInputStream());
        StringBuffer buffer = new StringBuffer();
           int value;
           while ((value=in.read()) != -1) {
               buffer.append((char)value);
            }
           String formData =  buffer.toString();
           System.out.println("Form Data==========>"+ formData);
    } catch (Exception e) {                   
      System.out.println("ERROR2=====>"+e);
    }                                             
}

如何在调用servlet时获取当前用户的详细信息?

1 个答案:

答案 0 :(得分:3)

一种方法是明确地将其传递给send操作的网址,例如:

uri = ".../FormData?username={xxf:get-request-header('Orbeon-Username')}"

在Orbeon Forms 4.9中,有一个更直接的新xxf:username()函数。

在servlet端,您可以使用以下方法检索URL参数:

request.getParameter("username")