Saltar al contenido.

Jose Manuel Prieto Palacios

Computer Science Engineer

Mi Gavatar

Jose Manuel Prieto Palacios

RSS Feed RSS - Entradas

RSS Feed RSS - Comentarios

LinkedIn

http://es.linkedin.com/in/josemanuelprieto
abril 2013
L M X J V S D
1234567
891011121314
15161718192021
22232425262728
2930  
« Mar   May »

Archivos

  • diciembre 2014
  • noviembre 2014
  • octubre 2014
  • septiembre 2014
  • agosto 2014
  • julio 2014
  • junio 2014
  • mayo 2014
  • abril 2014
  • marzo 2014
  • febrero 2014
  • enero 2014
  • diciembre 2013
  • noviembre 2013
  • septiembre 2013
  • agosto 2013
  • junio 2013
  • mayo 2013
  • abril 2013
  • marzo 2013
  • febrero 2013
  • enero 2013
  • diciembre 2012
  • octubre 2012
  • septiembre 2012
  • diciembre 2011
  • octubre 2011
  • septiembre 2011
  • agosto 2011
  • febrero 2011
  • mayo 2010
  • febrero 2010
  • enero 2010
  • diciembre 2009
  • noviembre 2009
  • octubre 2009
  • enero 2009

temas mas frecuentes

#agileopenspain2009 aop apache cxf apache tomcat aspectj Aspecto automatic install bash bbdd birt brew certificado certificados classpath client web service Componente config consola console Contenedor cxf DDBB debug eclipse editor error firma FTP github html i18n Informes install interceptor Inversion de Control jasper java javascript jaxb keytool licencias liferay linux log log4j macosx manifest Marshall maven message queue mom mysql openssl Patrones de Diseño poo principios Programacion Orientada a Aspectos programador properties proxy rabbitmq regex script soap soapfault Spring ssh ssl test tomcat ubuntu web services windows7 ws-security wso2

Comentarios recientes

prietopa en CXF jaxb send string as C…
jmzc en CXF jaxb send string as C…
prietopa en He encontrado un BUG (CXF-5527…
jmzc en He encontrado un BUG (CXF-5527…
prietopa en He encontrado un BUG (CXF-5527…

Blog Stats

  • 99.729 hits

Blogroll

  • WordPress.com
  • WordPress.org

Top Clicks

  • Ninguno

Login filter portlet redirect

12/04/2013 Jose Manuel Prietofilter, liferay, login, portlet

Necesito filtrar todas las paginas de mi portlet para permitir el paso solo a aquellas personas que esten logadas.

Existen cuatro tipo de Filtros para los Portlets 2.0 (Render, Action, Resource, Event). Voy a utilizar solo Render y Action.

El problema mas grande que encontre, es que en los filtros Render no se puede redireccionar, por una cuestion de diseño, solo en los action.

Mi solucion: en la fase render repinto el JSP con un enlace a la url de login.

Los filtros son muy sencillos. Solo necesitamos un clase que realiza la accion pertinente y configurar este filtro en el portlet en su portlet.xml

package josemanuel.prietopalacios.net.portlets.filter;

import java.io.IOException;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.filter.ActionFilter;
import javax.portlet.filter.FilterChain;
import javax.portlet.filter.FilterConfig;
import javax.portlet.filter.RenderFilter;

import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;

public class LoggingFilter implements ActionFilter, RenderFilter {

	private static final String URL_LOGIN = "urlLogin";
	private static final String USERNAME = "username";
	private static final String J_USERNAME = "j_username";
	private static final String REPLACE_URL = "$URL$";
	private static final String MESSAGE_NOT_LOGGED = "<h3>You must be logged. <a href=""+REPLACE_URL+"">login</a></h3>";

	private String urlLogin;

	public void init(FilterConfig filterConfig) throws PortletException {

		urlLogin = filterConfig.getInitParameter(URL_LOGIN);

		if (isBlank(urlLogin)) {
			throw new PortletException(
					"Not configured login URL in the file portlet.xml");
		}
	}

	public void destroy() {

	}

	public void doFilter(ActionRequest request, ActionResponse response,
			FilterChain chain) throws IOException, PortletException {

		String username = getUsername(request);

		if (username == null) {
			String url = getUrl((PortletRequest) request);
			response.sendRedirect(url);
		}

		chain.doFilter(request, response);
	}

	public void doFilter(RenderRequest request, RenderResponse response,
			FilterChain chain) throws IOException, PortletException {

		String username = getUsername(request);

		if (username == null) {
			String url = getUrl((PortletRequest) request);
			response.getWriter().append(MESSAGE_NOT_LOGGED.replace(REPLACE_URL, url));
		}else{
			chain.doFilter(request, response);
		}
		
	}

	private String getUrl(PortletRequest request) {
		ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
		String url = themeDisplay.getPortalURL() + themeDisplay.getPathMain() + urlLogin;
		return url;
	}

	private String getUsername(PortletRequest request) {
		String user = (String) request.getAttribute(USERNAME);
		if (!isBlank(user)) {
			return user;
		}

		user = (String) request.getAttribute(J_USERNAME);
		if (!isBlank(user)) {
			return user;
		}

		user = request.getRemoteUser();
		if (!isBlank(user)) {
			return user;
		}

		return null;
	}

	private boolean isBlank(String str) {
		if (str == null) {
			return true;
		} else if (str.equals("")) {
			return true;
		} else if (str.trim().isEmpty()) {
			return true;
		} else {
			return false;
		}
	}

}
<portlet-app>
    <!-- ... -->
	<filter>
		<filter-name>LoggingFilter</filter-name>
		<filter-class>josemanuel.prietopalacios.net.portlets.filter.LoggingFilter</filter-class>
		<lifecycle>ACTION_PHASE</lifecycle>
        <lifecycle>RENDER_PHASE</lifecycle>
		<init-param>
			<name>urlLogin</name>
			<value>/portal/login</value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>LoggingFilter</filter-name>
		<portlet-name>prueba-portlet</portlet-name>
	</filter-mapping>
</portlet-app>

Opciones:
– si quieres i18n puedes recuperar el locate para segun que locate, dar un mensaje u otro.

request.getLocale();

– recuperar el log de la aplicacion para mostrar mensajes.
(He perdido el codigo!!)

Comparte:

  • Compartir
  • Haz clic para enviar un enlace por correo electrónico a un amigo (Se abre en una ventana nueva)
  • Haz clic para imprimir (Se abre en una ventana nueva)
  • Haz clic para compartir en LinkedIn (Se abre en una ventana nueva)

Me gusta esto:

Me gusta Cargando...

Relacionado

Login filter portlet redirect

Navegador de artículos

← crear database liferay61
Debuguear Tomcat en Eclipse →
Blog de WordPress.com.
Privacidad y cookies: este sitio utiliza cookies. Al continuar utilizando esta web, aceptas su uso.
Para obtener más información, incluido cómo controlar las cookies, consulta aquí: Política de cookies
  • Seguir Siguiendo
    • Jose Manuel Prieto Palacios
    • ¿Ya tienes una cuenta de WordPress.com? Accede ahora.
    • Jose Manuel Prieto Palacios
    • Personalizar
    • Seguir Siguiendo
    • Regístrate
    • Acceder
    • Copiar enlace corto
    • Denunciar este contenido
    • View post in Reader
    • Gestionar las suscripciones
    • Contraer esta barra
A %d blogueros les gusta esto: