Fórum

Portlet de Login propio

Octavio Sánchez, modificado 11 Anos atrás.

Portlet de Login propio

Junior Member Postagens: 80 Data de Entrada: 31/03/09 Postagens Recentes
Buenos días gente,

antes de nada agradecer que estéis leyendo estas líneas.

Estoy haciendo un portlet de login propio (no queremos modificar el que viene con Liferay así que es un requisito que no puedo modificar) y estoy teniendo un problema con el manejo de sesiones de Liferay.

Mi código en el action es el siguiente:

HttpServletRequest httprequest = PortalUtil.getHttpServletRequest(request);
HttpServletResponse httpresponse = PortalUtil.getHttpServletResponse(response);
Class<?> loginUtil = PortalClassLoaderUtil.getClassLoader().loadClass(
"com.liferay.portlet.login.util.LoginUtil");
Object[] parametros = { httprequest, httpresponse, login, password, rememberMe, authType };
Class<?>[] parametrosClass = { HttpServletRequest.class, HttpServletResponse.class, String.class,
String.class,
boolean.class, String.class };

callMethod(loginUtil, "login", parametros, parametrosClass);


private Object callMethod(Class<?> clase, String methodName, Object[] params, Class<?>[] paramsClass)
throws Exception {
Method metodo = clase.getMethod(methodName, paramsClass);
metodo.setAccessible(true);
return metodo.invoke(clase, params);
}


private void logeaSession(PortletRequest request) {
HttpServletRequest httprequest = PortalUtil.getHttpServletRequest(request);
HttpSession session = httprequest.getSession();
logger.error("\n\npeticion: id=" + session.getId() + ", j_usename=" + session.getAttribute("j_username")
+ ", j_password=" + session.getAttribute("j_password") + ", j_remoteuser="
+ session.getAttribute("j_remoteuser") + "\n");
}


Y funciona correctamente, me crea una sesión nueva (ya que tengo la propiedad session.enable.phishing.protection a true).
Llamando al método logeaSesion antes de la llamada a LoginUtil pinta lo siguiente:

peticion: id=SYYee7V0iwb052mgskMebbX+.undefined, j_usename=null, j_password=null, j_remoteuser=null


si después de hacer la llamada a LoginUtil llamo al método de logeaSession me pinta lo siguiente:

peticion: id=yFeGi8cCVjjsorbJBWzhaVZX.undefined, j_usename=10613, j_password=10613, j_remoteuser=10613


El problema es que después de esto es como si la sesión no se estuviera guardando en el contexto de Liferay por lo que al recargar lo valores vienen vacíos:

peticion: id=yFeGi8cCVjjsorbJBWzhaVZX.undefined, j_usename=null, j_password=null, j_remoteuser=null



He probado varias cosas, entre ellas poner en el liferay-portlet.xml lo siguiente:

<private-request-attributes>false</private-request-attributes>
<private-session-attributes>false</private-session-attributes>



Desgraciadamente sólo he conseguido que funcione desactivando la propiedad session.enable.phishing.protection, pero por temas de seguridad no debería tener que hacerlo (es necesario evitar el phishing en la aplicación que estamos desarrollando).


¿Se os ocurre qué puedo hacer? He estado mirando en los foros y al final lo que hace la gente es poner session.enable.phishing.protection=false en el portal-ext.properties para que funcione...


Gracias por todo,
Un saludo,
Octavio
Octavio Sánchez, modificado 11 Anos atrás.

RE: Portlet de Login propio

Junior Member Postagens: 80 Data de Entrada: 31/03/09 Postagens Recentes
Me respondo a mí mismo, hay que poner en el liferay-portlet.xml lo siguiente:

<private-request-attributes>true</private-request-attributes>
<private-session-attributes>true</private-session-attributes>


o lo que es lo mismo, no poner ninguna de ambas entradas (por defecto sus valores son true).
Arvind Gupta, modificado 11 Anos atrás.

RE: Portlet de Login propio

Junior Member Postagens: 29 Data de Entrada: 18/12/12 Postagens Recentes
He seguido los pasos, pero cuando ponemos session.enable.phishing.protection = true,
dockbar no viene.