Tips, Soluciones y Novedades en Tecnología

12/08/2018

Visualizar Excel desde Java










Si queremos ver,editar y otra operación sobre archivos excel en linea, y este sean gestionadas por nuestra aplicación, una buena alternativa es ZK Framework, https://www.zkoss.org/





En este Post voy a compartir como visualizar nuestros archivos Excel desde una aplicación web en Java.





Para ello necesitamos agregar las dependencias a nuestro proyecto web en Maven.







Agregamos el repositorio.




<repositories>
<repository>
<id>ZK CE</id>
<name>ZK CE Repository</name>
<url>http://mavensync.zkoss.org/maven2</url>
</repository>
</repositories>







A continuación agregar la dependencia del artefacto.






 <!-- Required if using ZK Spreadsheet OSE -->
<dependency>
<groupId>org.zkoss.zss</groupId>
<artifactId>zss</artifactId>
<version>3.0.1</version>
</dependency>




A continuación creamos un archivo "index.zul" y agregamos el siguiente contenido.






<window title="Mi Archivo excel de Colaboradores"
height="100%" width="100%">
<spreadsheet src="/Archivo.xlsx"
vflex="1" hflex="1" maxVisibleRows="150" maxVisibleColumns="40"
showToolbar="true" showSheetbar="true"

     showFormulabar="true" showContextMenu="true"/>
</window>












 Colocar el archivo Excel según la imagen adjunta, compilar y deployar en un servidor web.









Como podemos observar con pocos pasos pudimos visualizar un archivo Excel en nuestra aplicación Java, sobre estas opciones se puede configurar para tener un control total sobre el archivo desde eventos, cargar datos desde base de datos, etc.



El código completo lo pueden bajar en mi Github aquí



Saludos.




URL Firmadas en AWS





Hoy veremos como acceder a nuestros archivos privados de AWS S3 desde CloudFront, tenemos un Bucket en S3 con archivos privados, es decir sin acceso publico.



Como puedo descargar el archivo desde una URL?



La solución que voy a compartir es mediante URL firmadas, este mecanismo permite a nuestro que archivo solo pueda ser accedido por la URL firmada e identificada, aplicando un tiempo para acceder y pasado ese periodo la URL quedará inaccesible.





Para ello vamos a ejecutar una serie de Pasos:



1: Crear un Bucket



Como primero paso vamos a crear un Bucket













 Creamos nuestro Bucket "mybucket-ejemplo"



2: Cargar archivos al Bucket









 Cargamos un archivo a nuestro buecket







Si intentamos acceder a nuestro archivo, vemos que no es posible, por que al subir un archivo por defecto es privado.



3: Crear una distribución a CloudFront



 Ahora debemos dirigir al servicio CloudFront para crear una nueva distribución teniendo en cuenta cierta configuración.











 Como podemos observar en la imagen adjunta, se ha enumerado 4 puntos en la primera sección del formulario, explico cada una.




  1. Seleccionar el Bucker creado anteriormente como fuente de la distribución

  2. Habilitar acceso restringido al Bucket, Para poder acceder desde la distribución a los archivos privados

  3. Crear un origen de identidad "access-identity-mybucket-ejemplo.s3.amazonaws.com"

  4. Actualizar la politica del Bucket con la Identidad del paso 3, esto permite que se actualize automaticamente, en caso no seleccionar el Paso 4, se debe realizar manualmente.



 Ahora veremos la parte final del formulario de la distribución










Debemos seleccionar "YES" la opción "Restrict Viewer Access"  y creamos la distribución.





Los pasos previos son suficiente para que nuestra distribución de CloudFront espere una URL firmada en cada petición.



Adicionalmente se requiere un CloudFront key par para poder firmar la URL desde el cliente Java, lo puedes obtener en

https://console.aws.amazon.com/iam/home?region=us-east-1#/security_credential



Apunta la clave generada y descarga el archivo .pem





4: Generar una url firmada con el cliente Java de CloudFront



En este paso lo que debemos hacer es crear un proyecto Java con Maven y agregar la siguiente dependencia.








 <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-cloudfront -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-cloudfront</artifactId>
<version>1.9.3</version>
</dependency>




Y el código para firmar nuestra URL desde Java se muestra a continuación.




public class MyTestCloudFrount {
public static void main(String[] args) throws Exception {
/**
* DNS de tu distribución CloudFront
*/
String distributionDomainName = "dnpu4fytk6zvf.cloudfront.net";
/**
* El Private key de CloudFront
*/
File cloudFrontPrivateKeyFile = new File("D:\\pk-APKAJTE3NCSEDSSSD.pem");
/**
* Access Key ID del CloudFront key par
*/
String cloudFrontKeyPairId = "APKAJTE3NCFTGLAPBXRA";
/**
* Nombre del archivo privado que se encuentra en el bucket
* "mybucket-ejemplo"
*/
String fileName = "Crear_bucket.png";
Date expirationDate = new Date(System.currentTimeMillis() + 60 * 1000);
String signedUrl = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
CloudFrontUrlSigner.Protocol.https,
distributionDomainName,
cloudFrontPrivateKeyFile,
fileName,
cloudFrontKeyPairId,
expirationDate
);
System.out.println(signedUrl);
}
}




Con eso ya podemos acceder a nuestro archivo privado



5: Acceder a nuestro archivo



Sin URL firmado









Con URL Firmado









  Saludos.