11.04.2014 Views

Synopsis News

Revista Synopsiana en su Lanzamiento por los 19 años de Synopsis

Revista Synopsiana en su Lanzamiento por los 19 años de Synopsis

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

SYNOPSIS NEWS Número 1<br />

<strong>Synopsis</strong><br />

<strong>News</strong><br />

19 años- Abril, 2014<br />

EL NEXO ENTRE LA TECNOLOGÍA Y SUS NEGOCIOS<br />

Un Nuevo Aniversario<br />

por Lalo Zavala<br />

Con mucho agrado recibo el encargo para dirigir<br />

unas palabras con motivo del aniversario 19 de<br />

nuestra<br />

empresa.<br />

En 1995 llegamos a Caminos del Inca 1570 con el<br />

programa de partners de IBM, un joven Ricardo y<br />

sus socios orgullosos ostentaban un logo de<br />

Sybase, que en aquellos momentos con su<br />

Powerbuilder se estaba dando inicio a la era Client<br />

Server, eclipsando el dominio que por años habían<br />

mantenido las aplicaciones en Fox y Clipper. El<br />

entendimiento de esta dinámica de la industria<br />

seria clave en la decisión que tomaría <strong>Synopsis</strong><br />

para enrolarse en el programa de software IBM<br />

con el Sistema Operativo OS/2 y tomar las<br />

herramientas de desarrollo Visual Age, con<br />

tecnología orientada a objetos.<br />

Ese año, el primer almuerzo anual que organizó<br />

<strong>Synopsis</strong>, fue en una mesa larga de un restaurant<br />

de San Isidro, con la participación de Citi y P&G,<br />

sus dos primeros clientes y algunos pocos de IBM<br />

Software Group … quién iba a pensar que años<br />

después el Gerente General de IBM y de las<br />

empresas más grandes de tecnología serian<br />

asistentes conspicuos a este evento.<br />

En 1998 se marca un hito importante para<br />

<strong>Synopsis</strong>: el Banco de Lima Sudameris pide<br />

desarrollar una página de Banca por Internet con<br />

tecnología IBM, Ricardo asumió personalmente el<br />

proyecto, programando en un pequeño escritorio<br />

en la puerta del Centro de Cómputo, Piso 5 del<br />

edificio de Miroquesada en el centro histórico. De<br />

este esfuerzo se generarían futuros y exitosos<br />

proyectos en la plataforma IBM WebSphere ,<br />

comenzando en el Banco Wiese Sudameris, luego<br />

Banco Sudamericano, hoy ScotiaBank y<br />

convirtiendo el middleware IBM en un estándar de<br />

la banca peruana, con un liderazgo único en la<br />

región.<br />

Desde ese momento y durante los siguientes años<br />

desde IBM, Microsoft, Oracle y SAP, siempre fue<br />

<strong>Synopsis</strong> un aliado, requerido por todos los<br />

fabricantes tecnológicos por su permanente<br />

búsqueda de innovación, compromiso con el<br />

cliente y excelencia en los productos que entrega.<br />

Esos valores son los que hacen que hoy <strong>Synopsis</strong><br />

sea una empresa líder con mas de 30 clientes del<br />

top 100 y más de 130 colaboradores.<br />

Mirando al Futuro: Hoy nos encontramos en un<br />

entorno en que la tecnología de la información<br />

acapara las primeras páginas de cualquier medio<br />

de comunicación, las tendencias de redes<br />

sociales, big data, apps móviles y computación en<br />

la nube hacen que nuestros principales clientes<br />

estén pendientes de cómo asumimos esas<br />

tecnologías para incorporarlas a sus empresas.<br />

Nuestro lema: "El nexo entre la tecnología y su<br />

negocio" está hoy más vigente que nunca.<br />

El pertenecer a esta casa nos debe llenar de<br />

orgullo y asumir el reto de ser un profesional de<br />

alto nivel en el mercado IT. El límite a nuestras<br />

carreras en <strong>Synopsis</strong> está determinado por lo que<br />

cada uno defina, así lo demuestran todos los "ex"<br />

que hoy militan en las mejores empresas del país,<br />

en los departamentos de TI.<br />

Este año queremos lograr la internacionalización<br />

de nuestras operaciones en por lo menos dos<br />

países, vamos a retomar la iniciativa de colocar<br />

nuestros especialistas para dictar cursos en el<br />

exterior a través del convenio con AVNET, y en<br />

contraparte tendremos la visita de estudiantes<br />

para prácticas de Computer Science de<br />

prestigiosas universidades norteamericanas, con<br />

el objetivo de seguir buscando el acceso al<br />

conocimiento que marca la diferencia. Esperamos<br />

seguir creciendo y tener un excelente 2014 gracias<br />

al esfuerzo y compromiso de cada uno de ustedes.<br />

EN ESTE NÚMERO<br />

Re certificación CMMi3<br />

Cada 3 años las empressas certificadas en CMMi<br />

deben volver a certificar sus procesos. El año 2013,<br />

volvimos a obtener la certificación gracias a la<br />

participación del Area de Calidad y los diversos<br />

equipos de proyecto.<br />

La celebración de este logro fue realizada en el<br />

Bowling de Larco Mar, con la asistencia de nuestros<br />

colaboradores. Fue una noche muy divertida donde<br />

pudimos compartir momentos de integración.<br />

Página 1


NÚMERO 1 2<br />

Reconocimientos 2013<br />

Felicitaciones Chicos por haber sobresalido el<br />

año 2013.<br />

Ustedes son ejemplo para todos nosotros.<br />

Sigan así.<br />

Cuidando nuestro Planeta<br />

Gxxxxxeoffroy Meder<br />

crea tus carpetas y archivos digitales, sólo<br />

imprime documentos importantes, con ello<br />

evitarás el uso innecesario de energía y la tala de<br />

miles de árboles.<br />

2- Ahorra energía con tu PC<br />

3- Dona los equipos viejos de tu oficina a<br />

colegios u otras organizaciones<br />

4- Viaja sólo cuando sea necesario<br />

1- Recicla el papel<br />

Recicla el papel de tu oficina, y reutilízalo<br />

imprimiendo en ambas caras de la hoja. Las<br />

empresas pueden recolectar grandes sumas de<br />

papeles que pueden ser utilizados nuevamente<br />

para elaborar nuevos. Entra en la era digital y<br />

Permite que tu PC funcione con un convertidor<br />

de poder y habilita la función que maneja el<br />

ahorrador de pantalla para que<br />

automáticamente se apague cada vez que no se<br />

utiliza la máquina.<br />

Utiliza el correo electrónico o el teléfono para<br />

comunicarte o realiza más videos conferencias<br />

para evitar los viajes innecesarios que<br />

contribuyen al uso de combustibles fósiles<br />

Todos podemos hacer mucho por nuestro planeta. Es sólo cuestión de<br />

cambiar nuestros hábitos a diario. Ya sea en la casa, el colegio, la<br />

oficina o en la calle cada uno de nosotros podemos contribuir a<br />

contrarrestar problemas como el cambio climático. Demos el ejemplo,<br />

aprendamos y enseñemos a nuestros amigos y familiares.


NÚMERO 1 3<br />

SYN DAY 2013<br />

Algunas fotos de la premiaciones<br />

Fin de Año Synopsiano - 2013<br />

CITAS CITABLES<br />

“Dime y lo olvido, enséñame y lo recuerdo,<br />

involúcrame y lo aprendo”<br />

— Benjamín Franklin<br />

CHISTES INFORMATICOS<br />

¿Cuántos programadores se necesitan para<br />

cambiar un foco?<br />

XP (eXtreme Programming):<br />

Dos, obvio... Uno que lo cambia mientras<br />

explica cada paso que realiza mientras el otro<br />

escucha las explicaciones de qué es un socket.


SYNOPSIS NEWS Número 1<br />

PRÓXIMOS CUMPLEAÑOS<br />

Junio<br />

ANIVERSARIOS<br />

SYNOPSIANOS (ENE – JUN)<br />

SYNOPSIANITOS 2014<br />

Alejandro - BB de<br />

Juan C Montoya<br />

Andrea – BB de<br />

Eliana Zubiaga<br />

Valentina – BB de<br />

Jaime Barboza<br />

Valeria – BB de<br />

Oscar Huaraz


El segu ndo tag define el bea n de nu estra implementación del UserDetailsService, servicio clave en la autenticaci ón.<br />

NÚMERO 1 5<br />

Synopsiando<br />

por Geoffroy Meder<br />

Sobre el autor<br />

Seguridad de<br />

Aplicaciones Web Java<br />

En todas las etapas del proceso de desarrollo<br />

de software desde el diseño hasta el<br />

despliegue y la configuración de los<br />

servidores de aplicación y web, la seguridad<br />

de una aplicación web java tiene que tomarse<br />

en cuenta.<br />

Hay muchos temas de importancia cuando se<br />

trata de la seguridad de aplicaciones web,<br />

pero en este artículo me voy a enfocar en tres<br />

temas importantes: la autenticación, le<br />

gestión de permisos y la validación de datos.<br />

Para la autenticación voy a presentar unos<br />

ejemplos basados en el framework<br />

SpringMVC y Spring Security, para la parte<br />

de validación voy a usar Hibernate Validators<br />

( JSR 303 )<br />

1.Autenticación y autorización con<br />

Spring Security.<br />

Spring Security : Es un frameworks Java<br />

basado en Spring y que proporciona<br />

mecanismo de autenticación, de<br />

autorización y implementa unos patrones de<br />

seguridad como el acceso vía usuario<br />

contraseña. Spring security puede utilizarse<br />

con varios mecanismos de autenticación<br />

como por ejemplo con LDAP, con<br />

autenticación de formulario, con<br />

autenticación simple pero en este ejemplo<br />

vamos a crear un servicio de autenticación<br />

personalizado.<br />

1,1 Configuración<br />

1.1.1 Web.xml<br />

En el archivo web.xml del proyecto es<br />

necesario agregar la configuración de Spring<br />

security siguiente:<br />

<br />

springSecurityFilterChain<br />

org.springframework.web.filter.D<br />

elegatingFilterProxy<br />

<br />

<br />

1.1.2 Spring Security XML<br />

Spring Security de la misma manera que<br />

Spring se configura con ayuda de archivos<br />

XML y de anotaciones. Creamos un archivo<br />

base de configuración de Srinp Security:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

El archivo precedente está compuesto de 3<br />

tags importantes:<br />

: define los recursos protegidos, como<br />

vamos a autenticar el usuario y donde le<br />

redirigimos si sus credenciales no son<br />

correctos. El atributo « use-expressions » es<br />

una novedad de Spring 3 que permite definir<br />

reglas de autenticas con Expression<br />

Language. En nuestro caso solo queremos<br />

usuarios autenticados ( isAuthenticated(),<br />

devuelve true si el usuario no es anónimo).<br />

Para el resto dejamos spring generar un<br />

formulario HTML genérico para el ingreso de<br />

credenciales en el navegador ( <br />

)<br />

El último tag define el “authenticationmanager”<br />

que contiene la configuración de<br />

autenticación y la implementación del<br />

servicio. Realizamos una comparación de<br />

contraseña con hash SHA256.<br />

Geoffroy Meder ingresó a <strong>Synopsis</strong> en<br />

Agosto del 2010 integrándose al Área de<br />

Calidad.<br />

Actualmente se encuentra a la cabeza del<br />

Área de Investigación & Desarrollo.<br />

En su trabajo apoya a los diversos equipos de<br />

proyectos en las revisiones de auditoría y<br />

brinda recomendaciones de las mejores<br />

prácticas de programación.<br />

Participa en proyectos de consultoría, apoya<br />

en el proceso de reclutamiento y apoya en el<br />

crecimiento tecnológico.<br />

Aprovechemos y apliquemos sus<br />

recomendaciones en este artículo muy<br />

interesante.<br />

Los interesados en escribir algún artículo<br />

técnico, escribir a giescobar@synopsis.ws


NÚMERO 1 6<br />

… Synopsiando<br />

1.2 El servicio de autenticación<br />

El código siguiente representa una<br />

implementación personalizada de<br />

UserDetailsService.<br />

public class LoginService implements<br />

UserDetailsService {<br />

@Autowired<br />

private UserService userService;<br />

@Override<br />

public UserDetails<br />

loadUserByUsername(String username)<br />

throws UsernameNotFoundException {<br />

String passWord =<br />

userService.getPassword(username);<br />

if(passWord==null)<br />

{ throw new<br />

BadCredentialsException("Password not<br />

found");<br />

}<br />

User login = new User(username, passWord,<br />

loadAuth(username));<br />

return login;<br />

}<br />

private Collection<br />

loadAuth(String login){<br />

List auth = new<br />

ArrayList();<br />

SimpleGrantedAuthority user = new<br />

SimpleGrantedAuthority("User");<br />

auth.add(user);<br />

if("admin".equals(login))<br />

{<br />

SimpleGrantedAuthority admin = new<br />

SimpleGrantedAuthority("Admin");<br />

auth.add(admin);<br />

}<br />

return auth;<br />

}<br />

}<br />

Todo el trabajo lo hace un sólo método que<br />

se tiene que reescribir y que se llama<br />

loadUserByUsername. Este método se<br />

encarga de crear una implementación de<br />

UserDetails y devolverla. Una<br />

implementación básica es la clase “User” que<br />

tiene un constructor con 3 parámetros, que<br />

son usuario, contraseña y roles del usuario.<br />

Los roles en este ejemplo son hardcodeados<br />

pero pueden ser cargados de diferentes<br />

fuentes (base de datos, properties, ldap).<br />

Spring se encarga de comparar contraseñas<br />

(en nuestro ejemplo, hash SHA 256 de la<br />

contraseña) y aceptar o rechazar la<br />

autenticación.<br />

Otra funcionalidad interesante es la<br />

restricción de acceso que Spring Security<br />

proporciona a través de anotaciones.<br />

Existe una anotación llamada<br />

@PreAuthorize que de manera rápida y<br />

simple permite restringir el acceso de un<br />

método de una clase.<br />

Para restringir el acceso a un método<br />

solamente al rol “Admin” :<br />

@Controller<br />

public class HomeController {<br />

@PreAuthorize("hasRole('Admin')")<br />

@RequestMapping(value = "/admin",<br />

method = RequestMethod.GET)<br />

public String admin(Principal user) {<br />

logger.info("User '" + user.getName()<br />

+ "' is accessing adminOnly content");<br />

return "adminOnly";<br />

}<br />

}<br />

2. Validaciones Con Hibernate Validator<br />

Además de la parte de autenticación y<br />

autorización un proceso esencial para<br />

reforzar la seguridad de una aplicación web:<br />

la validación de la data recibida del usuario.<br />

Muchas técnicas de hacking como la<br />

inyección SQL o el XSS (cross site scripting)<br />

explotan una mala validación de la data<br />

recibida del usuario.<br />

Una norma de especificación JSR 303,<br />

conocida como “Bean Validation” permite a<br />

través de anotaciones implementar un<br />

mecanismo rápido y intuitivo de validación<br />

de Beans. Hibernate Validators proporciona<br />

implementaciones de validaciones comunes<br />

en el mundo java web.<br />

La validación funciona en dos acciones,<br />

primero crear las reglas de validaciones en<br />

los Beans y segundo validar el Bean. La<br />

configuración de la reglas de validación se<br />

realiza con anotaciones en campos o<br />

métodos de java Bean. La clase siguiente<br />

muestra unos de los varios “validators” que<br />

tiene Hibernate validator.<br />

public class User {<br />

@Range(min=0,max=200)<br />

private String id;<br />

@NotEmpty<br />

@SafeHtml(whitelistType=WhiteListType.B<br />

ASIC)<br />

private String code;<br />

@NotEmpty<br />

@SafeHtml(whitelistType=WhiteListType.B<br />

ASIC)<br />

private String name;<br />

... //setter and getter<br />

}<br />

@Range y @NotEmpty son explicitios,<br />

@SafeHtml permite validar si el HTML no<br />

tiene TAG inseguros como por ejemplo<br />

( para usar @SafeHtml se tiene que<br />

agregar el jar “jsoup” al classpath).<br />

El segundo paso es la validación del bean con<br />

factories de hibernate o directamente con<br />

una anotación de Spring MVC.<br />

Validación con Spring MVC<br />

@RequestMapping(value = "/test",<br />

method = RequestMethod.POST)<br />

public String test(@ModelAttribute @Valid<br />

User user, BindingResult br) {<br />

if(br.hasErrors())<br />

return "errorPage";<br />

return "home";<br />

}<br />

{<br />

}<br />

@Valid indica la validación del Bean User.<br />

Los resultados se encuentran en el segundo<br />

parámetro, BindingResult ( errores, mensajes<br />

).<br />

(Para imprimir mensajes en una JSP se puede<br />

utilizar tags de Spring )<br />

Validación con factory de<br />

Hibernate<br />

ValidatorFactory factory =<br />

Validation.buildDefaultValidatorFactory();


NÚMERO 1 7<br />

Validator validator = factory.getValidator();<br />

Set<br />

constraintViolations =<br />

validator.validate(user);<br />

String message =<br />

constraintViolations.iterator().next().getMes<br />

sage();<br />

No existen aplicaciones 100% seguras pero<br />

hay que tratar de construir productos más<br />

seguros con ayuda de frameworks y<br />

herramientas que nos permitan implementar<br />

fácilimente aspectos de seguridad a veces<br />

complejos y fastidiosos. Los ejemplos<br />

presentados permiten solucionar problemas<br />

de seguridad comunes de aplicaciones web.<br />

Para mayor detalle, les invito a<br />

consultar los siguientes enlaces:<br />

http://static.springsource.org/springsecurity/site/<br />

http://static.springsource.org/springsecurity/site/<br />

http://static.springsource.org/spring/docs/3.1<br />

.x/spring-framework-reference/html/,<br />

http://www.hibernate.org/subprojects/valida<br />

tor.html<br />

http://docs.jboss.org/hibernate/validator/4.2/<br />

referenco/en-US/html_single<br />

.<br />

Los interesados en publicar artículos de<br />

tecnología, contactarse con Gisella Escobar:<br />

giescobar@synopsis.ws


NÚMERO 1 8<br />

Nuevos Synopsianos 2014<br />

Enero - Abril<br />

Rosario Aparicio<br />

Analista Programadora<br />

AS/400<br />

Fernando Caballero<br />

Analista Programador<br />

AS/400<br />

Enrique García B.<br />

Analista Programador<br />

AS/400<br />

Paul Inche<br />

Soporte & Arquitectura<br />

Rosaluz Ccucho<br />

Asistente Comercial<br />

Amelia López<br />

Analista Programadora<br />

Lucía Azuaje<br />

Supervisora de<br />

Learning Services<br />

Andrea Soto<br />

Analista de Calidad<br />

Jeniffer Mamani<br />

Asistente RRHH<br />

Kevin Zelada<br />

Analista de Soporte<br />

Milko Quimper<br />

Analista Programador<br />

Javier Quintana<br />

Analista Programador


NÚMERO 1 9<br />

Cualquier parecido con la realidad…

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!