Una verdadera maravilla, el sato que ha dado WordPress a la versión 2.7 es inmenso, insuperable, con una interfaz administrativa digna de cualquier bloquero, hacen del Ajax mas que un lujo, lo convierten en una necesidad, miren el video.
Monthly Archives
Iniciando el proyecto encuestame.org
Después de 6 meses de planear, ya iniciamos el proyecto, esto va en serio, se que iniciar un proyecto del cual deseamos sea open source, es muy dificil, requiere de tiempo y sacrificios, pero estamos dispuestos.
De lo poco que quiero desvelar, es algo obvio, es un Sistema de Gestión de Encuestas en Línea, estará echo en Java.
Este proyecto, por ahora solo participamos 2 programadores, falta mucho camino por recorer y para esto quiero citar un Proverbio.
Un viaje de mil kilometros debe empezar por un paso.
Autor: Lao-Tsé
Disponible RichFaces 3.3 Beta4

El dia 9 de Diciembre se liberó y ya puedes descargarlo, esta versión 3.3 trae algunas novedades, dos componenetes muy interesantes, ademas de corregir varios bugs, puedes ver el detalle aqui.
- rich:editor – editor WYSIWYG que permite introducir texto formateado. Mas Info
- a4j:queue. Mecanismos de colas Globales por Defecto seran implementadas. Separando coponentes de las colas de definicion creadas. Mas Info
Puedes descargar las nuevas librerias aquí.
http://repository.jboss.org/maven2/org/richfaces/ui/richfaces-ui/3.3.0.BETA4/
La Seguridad Perfecta con Spring y el dropDownMenu de RichFaces
Bueno, sigo con la seguridad de Spring 2.0 o el conocido como el antiguo Acegi Security, ahora voy a proponer una alternativa para generar una seguridad con un componente de RichFaces, el dropDownMenu. ToolBar y menuItem.
Primero te recomiendo sigas la configuración de Spring con JDBC, o con LDAP, como tu lo desees, porque de todas formas todos los Roles ( o Permisos) quedan almacenados en la misma variable de Spring. También si deseas integrarlo con Facelest, aqui tenes los pasos a seguir.
Lo primero que hay que hacer, es construir el menú, para eso usamos un Tool Bar:
<rich:toolBar> <rich:dropDownMenu > <f:facet name="label"> <h:panelGroup> <h:graphicImage value="#{initParam['rootimages']}/images/icons/contexthelp.png" /> <h:outputText value="JotaDeveloper" /> </h:panelGroup> </f:facet> <rich:menuItem submitMode="ajax" value="Articulos"></rich:menuItem> <rich:menuItem submitMode="ajax" value="Tutoriales"></rich:menuItem> <rich:menuItem submitMode="ajax" value="Ayuda"></rich:menuItem> </rich:dropDownMenu> </rich:toolBar> |
El código es bien sencillo, no hace falta explicar mucho, solo que para poder colocar un dropDownMenu , es necesario el toolBar, y para el menuItem , debe estar dentro de un dropDownMenu.
Depues de esto, y espero que hayas leido los 3 articulos que sugerí anteriormente, vamos a crear un Bean, donde tendremos la logica de nuestra seguridad con el dropDownMenu.
import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.Authentication; import org.springframework.security.GrantedAuthority; import org.springframework.security.context.SecurityContext; import org.springframework.security.context.SecurityContextHolder; import org.springframework.security.ui.WebAuthenticationDetails; public class JotaDeveloperMenuBean { // Un objeto Booleano por cada elemento del Menu private Boolean rootJotaDeveloper; private Boolean rootTutoriales; private Boolean rootArticulos; private Boolean rootAyuda; // Objetos Spring Security private Object seguridadAcegi; // El GrantedAuthority es un Array con todos los Roles que recupera de la BD private GrantedAuthority[] listaAutoridades; private SecurityContext contexto; private Authentication autenticacion; private List<string> ListAutoridades = new ArrayList<string>(); private String nombreUsuario; private Boolean estaAutenticado; private WebAuthenticationDetails webAu; /** * Constructor que accede a toda la información de Spring Security */ public JotaDeveloperMenuBean() { this.seguridadAcegi = SecurityContextHolder.getContext() .getAuthentication().getPrincipal(); this.contexto = SecurityContextHolder.getContext(); this.autenticacion = SecurityContextHolder.getContext() .getAuthentication(); this.listaAutoridades = SecurityContextHolder.getContext() .getAuthentication().getAuthorities(); convertirArrayAuthoritiesToListAuthorities(); this.nombreUsuario = this.autenticacion.getName(); this.estaAutenticado = this.autenticacion.isAuthenticated(); } /** * Este metodo convierte el Array de Roles poco manejable en un List */ private void convertirArrayAuthoritiesToListAuthorities() { int it_cont; for (it_cont = 0; it_cont < listaAutoridades.length; it_cont++) { String ROL = listaAutoridades[it_cont].toString(); ListAutoridades.add(ROL); } } /** * Comprueba si existe determinado Rol en la Lista de Autoridades del * Usuario Logeado * * @param cadena * ROL * @return El resultado de la Busqueda */ private Boolean comprobarRol(String cadena) { Integer id = ListAutoridades.indexOf(cadena); // Si el Id es -1, el valor no fue encontrado. if (id != -1) { return false; } else { return true; } } /** * Los Getters que va leer cada elemento del Menu */ public Boolean getRootJotaDeveloper() { return rootJotaDeveloper = comprobarRol("ROLE_ROOT_JOTADEVELOPER"); } public Boolean getRootTutoriales() { return rootTutoriales = comprobarRol("ROLE_ROOT_TUTORIALES"); } public Boolean getRootAyuda() { return rootArticulos = comprobarRol("ROLE_ROOT_AYUDA"); } public Boolean getRootArticulos() { return rootAyuda = comprobarRol("ROLE_ROOT_ARTICULOS"); } } |
Despues de esto y incluir el Bean el el ManageBean de faces-config.xml, solo agregamos a la propiedad disabled del MenuItem el get del Bean.
<rich:toolBar> <acegijsf:authorize ifAllGranted="ROLE_ROOT_JOTADEVELOPER"> <rich:dropDownMenu > <f:facet name="label"> <h:panelGroup> <h:graphicImage value="#{initParam['rootimages']}/images/icons/contexthelp.png" /> <h:outputText value="JotaDeveloper" /> </h:panelGroup> </f:facet> <rich:menuItem submitMode="ajax" value="Articulos" disabled="#{jotaDeveloperMenuBean.rootArticulos}"></rich:menuItem> <rich:menuItem submitMode="ajax" value="Tutoriales" disabled="#{jotaDeveloperMenuBean.rootTutoriales}"></rich:menuItem> <rich:menuItem submitMode="ajax" value="Ayuda" disabled="#{jotaDeveloperMenuBean.rootAyuda}"></rich:menuItem> </rich:dropDownMenu> </acegijsf:authorize> </rich:toolBar> |
El resultado de todo esto, es que cuando inices sesión, el GrantedAuthority que genera en la sesión del usuario Spring Security, lo convertimos en un List, luego cada elemente del menu que tu crees, va preguntarle al List si existe, si Existe, regresa True, sino, False, y apareceran los menus cuales el usuario no tenga permiso desactivados, ademas de eso, no podra acceder via URL, si has configurado correctamente el security.xml del Spring Security.
Liberado PHP 5.3 alpha3
El equipo de desarrollo de PHP, ha liberado el tercer alpha del proximo PHP 5.3. Hay muchas novedades que podras encontrar en la documentación .
Algo cansino que siempre hay que decir, no lo uses para producción, pruebalo en tu casa, porque como siempre, tiene muchos fallos.
Una de las novedades y mas esperadas, son los namespaces.
