需要在运行时更改web.server.host属性

时间:2012-12-07 18:42:52

标签: liferay liferay-6

请帮助我解决以下问题

我有单个liferay实例,它上面有单个网站。此单个站点为多个客户端提供服务,并使用其专用域名

访问该站点

xxx.mysite.com - >客户端xxx的域名 yyy.mysite.com - >客户yyy的域名

这些域名是在位于liferay实例前面的apache web服务器中配置的。我在portal-ext.properties web.server.host中使用了property来配置liferay中的web服务器信息。 Liferay使用此属性生成页面上的所有链接(如果未提及此属性,则使用servername生成URL)。但是使用这个,我一次只能定义一个站点。我无法实现上述功能。我去了liferay代码,在PortalImpl.java中它有以下代码

public String getPortalURL(
    String serverName, int serverPort, boolean secure) {

    StringBundler sb = new StringBundler();

    if (secure || Http.HTTPS.equals(PropsValues.WEB_SERVER_PROTOCOL)) {
        sb.append(Http.HTTPS_WITH_SLASH);
    }
    else {
        sb.append(Http.HTTP_WITH_SLASH);
    }

    if (Validator.isNull(PropsValues.WEB_SERVER_HOST)) {
        sb.append(serverName);
    }
    else {
        sb.append(PropsValues.WEB_SERVER_HOST);
    }

    if (!secure) {
        if (PropsValues.WEB_SERVER_HTTP_PORT == -1) {
            if ((serverPort != Http.HTTP_PORT) &&
                (serverPort != Http.HTTPS_PORT)) {

                sb.append(StringPool.COLON);
                sb.append(serverPort);
            }
        }
        else {
            if (PropsValues.WEB_SERVER_HTTP_PORT != Http.HTTP_PORT) {
                sb.append(StringPool.COLON);
                sb.append(PropsValues.WEB_SERVER_HTTP_PORT);
            }
        }
    }

    if (secure) {
        if (PropsValues.WEB_SERVER_HTTPS_PORT == -1) {
            if ((serverPort != Http.HTTP_PORT) &&
                (serverPort != Http.HTTPS_PORT)) {

                sb.append(StringPool.COLON);
                sb.append(serverPort);
            }
        }
        else {
            if (PropsValues.WEB_SERVER_HTTPS_PORT != Http.HTTPS_PORT) {
                sb.append(StringPool.COLON);
                sb.append(PropsValues.WEB_SERVER_HTTPS_PORT);
            }
        }
    }

    return sb.toString();
}

在上面的方法中,它使用poratal-ext.properties中定义的web.server.host属性并构造URL。现在我需要覆盖此方法以在运行时确定Web服务器主机。

我的问题是。 如何在PoralImpl.java中覆盖此函数?我需要使用扩展来实现这一目标吗? 是另一种方式(更好的方式)来实现这个功能。

我正在使用liferay 6.1.0 GA-1 / tomcat bundle

1 个答案:

答案 0 :(得分:0)

是的,覆盖Liferay核心功能(=“portal-impl.jar”中存在的代码)的唯一方法是使用ext插件,http://www.liferay.com/community/wiki/-/wiki/Main/Ext+Plugin