11 octubre 2010

Desplegar una aplicación de grails que usa el Jasig CAS support for the Spring Security plugin

A veces el uso de nuevas tecnologías implica una extensa investigación para la resolución de problemas, ejemplo el deploy de una aplicación Grail 1.3.x en Glassfish. Esta ocasión quiero escribir un consejo para aquellos que estén usando Jasig CAS support for the Spring Security plugin y deseen desplegar su app en un serverlet container o bien un servidor de aplicaciones como lo es GlassFish. ¿Por qué hay necesidad de hacer esto?, principalmente por un bug que existe al momento del despliegue y en el proceso de creación del bean "casServiceProperties". El mensaje de error que aparecerá es similar a este:

2010-07-23 16:00:22,061 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR StackTrace  - Sanitizing stacktrace: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'casServiceProperties': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'groovy.util.ConfigObject' to required type 'java.lang.String' for property 'artifactParameter'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [groovy.util.ConfigObject] to required type [java.lang.String] for property 'artifactParameter': no matching editors or conversion strategy found at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
at org.codehaus.groovy.grails.commons.spring.ReloadAwareAutowireCapableBeanFactory.doCreateBean(ReloadAwareAutowireCapableBeanFactory.java:135) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
at org.codehaus.groovy.grails.commons.spring.ReloadAwareAutowireCapableBeanFactory.doCreateBean(ReloadAwareAutowireCapableBeanFactory.java:135) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)

La forma más simple de solucionar esto (workaround) es declarar en el Config.groovy todas las posibles propiedades que necesita el plugin, esto quiere decir que debemos declarar todas las opciones que nos dice la documentación del plugin y el resultado será semejante a esto:

//Config for CAS server grails.plugins.springsecurity.cas.loginUri = '/login'
grails.plugins.springsecurity.cas.serverUrlPrefix = 'http://server:8080/casserver'
grails.plugins.springsecurity.cas.serviceUrl = 'http://localhost:8080/app/j_spring_cas_security_check' 
grails.plugins.springsecurity.cas.filterProcessesUrl = '/j_spring_cas_security_check' grails.plugins.springsecurity.cas.key = 'my_key' 
grails.plugins.springsecurity.cas.sendRenew = false 
grails.plugins.springsecurity.cas.artifactParameter = 'ticket' 
grails.plugins.springsecurity.cas.serviceParameter = 'service' 
grails.plugins.springsecurity.cas.useSingleSignout = true  
grails.plugins.springsecurity.cas.proxyCallbackUrl = null 
grails.plugins.springsecurity.cas.proxyReceptorUrl = null 
grails.plugins.springsecurity.logout.afterLogoutUrl = 'http://server:8080/casserver/logout?url=http://localhost:8080/app/'

Y con eso ya podremos desplegar nuestro WAR sin problemas en nuestro server.

07 octubre 2010

Root a tu Android a un click de distancia

Después de hacerle root a mi Xperia X10 en las pasadas semanas me animo a compartir el "como" pues hasta ahora no he tenido ningún problema.
  1. Esto ha sido probado en xPeria x10 y xPeria x10 mini
  2. Descargar el programa UniversalAndRoot (Ni tan universal, pero muy bueno)
  3. Una vez descargado lo pasamos a nuestra SD card
  4. Exploramos la SD Card (Recomiendo buscar en el market File Manager)
  5. Una vez localizado el archivo UniversalAndroot_1.6.1.apk lo ejecutamos
  6. Al terminar la instalación abrimos la aplicación Universal Androot, seleccionamos nuestra versión de android y damos en Root; enjoy!
  7. Además también se instalará una app para el control de los permisos de Superusuario en la cual podemos controlar a quien le damos permiso o a quien no, descuida entra también de forma automática cuando una app quiere permisos de root.
  8. Si ya no quieres ser root también está la opción de Unroot, bueno a estas alturas creo que ya lo has notado, pero más vale confirmar.
Compatible con:
  • Google Nexus One (2.2)
  • HTC Hero (2.1)
  • HTC Magic (1.5) (también 1.6)
  • Dell Streak (2.1)
  • Motorola Milestone (2.1)
  • Motorola XT701
  • Motorola XT800 (2.1)
  • Motorola ME511
  • Sony Ericsson X10 (1.6)
  • Sony Ericsson X10 Mini Pro (1.6)
  • Acer Liquid (2.1)
  • Vibo A688 (1.6)
  • Lenovo Lephone (1.6)
Disclaimer: Todo gran poder con lleva una gran resposabilidad, la cual yo no compartiré.

Update: Hacer root a un Android es útil para ciertos propósitos, pero no para todo mundo. Lo mejor para saber como hacer root ex buscar en los foros de XDA developers.

03 octubre 2010

Actualizar Ubuntu 10.04 a 10.10 de forma rápida


Por que una imagen vale más que mil palabras:
  1. Alt-F2
  2. update-manager -d
  3. Comprobar actualizaciones
  4. Actualizar el sistema
  5. Actualizar a 10.10
  6. Disfrutar