Fórum

[Resolvido] Host específico para HTTPS

thumbnail
Henrique Simoes de Andrade, modificado 13 Anos atrás.

[Resolvido] Host específico para HTTPS

Regular Member Postagens: 165 Data de Entrada: 30/04/10 Postagens Recentes
Boa tarde galera,

Seguinte... na infraestrutura daqui, não é possível, pelo menos inicialmente, configurar um endereço para atender requisições HTTP e HTTPS, ou seja, quando tiver que utilizar HTTPS precisarei de outro endereço... mad:

Ficaria algo assim: http://portal.meudominio.com.br e https://portalseguro.meudominio.com.br.

Bem... tentei argumentar explicando que precisaria ser no mesmo host devido ao uso de sessão etc (ou não seria bem assim?).

Procurei pelo Liferay e não vi opção para definir host para HTTPS, só o web.server.host... então parti p/ código-fonte e achei a classe PortalImpl.java que tem o método:
public String getPortalURL(String serverName, int serverPort, boolean secure)


Criei uma classe no Ext fazendo um extend deste PortalImpl:
public class PortalImplExt extends PortalImpl {
	
	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);
			}
			
			//obter o host de acordo com o tipo de protocolo
			String webServer = (!secure) ? PropsValues.WEB_SERVER_HOST : PropsValuesExt.WEB_SERVER_HOST_HTTPS;
			//se for protocolo seguro e não estiver um host específico definido, utilizar o padrão.
			if (secure && Validator.isNull(webServer)) {
				webServer = PropsValues.WEB_SERVER_HOST;
			}
			if (Validator.isNull(webServer)) {
				sb.append(serverName);
			}
			else {
				sb.append(webServer);
			}

			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();
		}	

}


O PropsValuesExt.WEB_SERVER_HOST_HTTPS está pegando o valor de uma propriedade que criei: web.server.host.https.

Daí dei uma procurada nos xml's e encontrei o util-spring.xml que define a classe a ser utilizada para implementar o Portal.java e modifiquei para:
	<bean id="com.liferay.portal.util.PortalUtil" class="com.liferay.portal.util.PortalUtil">
		<property name="portal">
			<bean class="com.liferay.portal.util.PortalImplExt" />
		</property>
	</bean>


Aí funcionou parcialmente, quando clica em 'Logar' o portal redireciona para o host definido, mas após o login continua no host HTTPS e não volta para o HTTP...

Apesar de ter funcionado para o que eu queria (provar que desta forma não vai funcionar) eu gostaria de saber se dá p/ fazer um ext deste util-spring.xml (tipo um util-spring-ext.xml) só com este trecho que fiz, pois neste caso eu estou utilizando o conteúdo inteiro do XML no ext-impl.jar.

Se estiver confuso por favor me avisem... emoticon

Meu properties-ext está assim:
# Definicao do uso do SSL
web.server.host=portal.meudominio.com.br
web.server.host.https=portalseguro.meudominio.com.br
web.server.protocol=http
web.server.http.port=80
web.server.https.port=443
company.security.auth.requires.https=true
session.enable.phishing.protection=false
com.liferay.portal.servlet.filters.sessionid.SessionIdFilter=true


Liferay 6.0.5 CE, Apache 2.2 na frente com mod_ssl configurado e um certificado de teste (criado utilizando OpenSSH).

vlw!

ps: teria melhor forma de 'extender' esta classe PortalImpl.java? apesar desta ser uma principal e acredito que nunca deveria ser 'modificada' para não dificultar atualizações, mas não vi outra opção até o momento.
thumbnail
Thiago Leão Moreira, modificado 13 Anos atrás.

RE: Host específico para HTTPS

Liferay Legend Postagens: 1449 Data de Entrada: 10/10/07 Postagens Recentes
Dae Henrique,

Bom, eu nunca fiz isso mas existe a possibilidade de criar uma arquivo chamado META-INF/ext-spring.xml. Ele vai ser carregado por último pelo contexto do Spring e acredito que ele irá sobreescrever com a tua implementação o atributo PortalImpl na classe PortalUtil.
Se der certo nos avise.
thumbnail
Henrique Simoes de Andrade, modificado 13 Anos atrás.

RE: Host específico para HTTPS

Regular Member Postagens: 165 Data de Entrada: 30/04/10 Postagens Recentes
Opa Thiago, funcionou! vlw!
thumbnail
Thiago Leão Moreira, modificado 13 Anos atrás.

RE: Host específico para HTTPS

Liferay Legend Postagens: 1449 Data de Entrada: 10/10/07 Postagens Recentes
Show!