lunes, 6 de octubre de 2014

[Java] Actualizar un JPanel en tiempo de ejecución


Java no es muy bueno con el trabajo de interfaces graficas, pero tiene un conjunto de librer&icute;as que son buenas (adem´s de contar con FX), en este caso queremos actualizar un panel central dentro de un formulario.  Para esto lo que queremos según la figura es que al presionar clic en los botones en la parte del centro aparezca el cambio y no haya necesidad que abrir mas ventanas. 


Para esto usaremos Netbeans 8.0, y crearemos un proyecto nuevo -> Java Aplicación 

Agregaremos un JFrame que ser´ nuestra pantalla que vemos en la figura anterior. Lo primero que hicimos fue poner como BorderLayout nuestro JFrame, esto lo que hace es dividir mi pantalla en sur, norte, este, oeste y centro este ultimo se expande a lo que queda de la pantalla .

Posteriormente en la pantalla, en la parte norte inserto un Jpanel y dando clic derecho escojo como administrador de diseño FlowLayout para que los botones se pongan lineales, posteriormente agrego los dos botones en la parte superior. 

Luego nos vamos a agregar nuevo Item de swing y agregamos dos JPanelForm que vienen junto con los JFrame y ponemos en cada uno de ellos, su contenido. 


Listo con eso sera suficiente lo demas se lo dejaremos al codigo 

Declaraamos un JPanel que va a hacer el interno 

JPanel aux; 

Y ahora por ejemplo yo quiero que aparezca el panel dos desde el inicio despues de initComponents dentro del constructor pondría lo siguiente 

        initComponents();
        aux = new Dos ();  
        this.add(aux,BorderLayout.CENTER);        
        this.pack();
     
y en cada uno de los eventos de los botones pues lo que queramos abrir 

 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:        
    
        this.remove(aux);
        aux = new Uno(); 
        this.add(aux,BorderLayout.CENTER);
        //this.repaint();
        this.pack();
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:                
        
        this.remove(aux);
        aux = new Dos ();  
        this.add(aux,BorderLayout.CENTER);        
        this.pack();
    }
Espero les haya servido.

domingo, 5 de octubre de 2014

[Java] Leer datos de un archivo properties en java


Para leer datos que tienes en un archivo por ejemplo un tipo properties, java tiene una clase especial que permite leer los datos sin necesidad que dependamos de la lectura del archivo ni nada por el estilo, llamada ResourceBundle que facilita este trabajo.


Si vemos en la imagen solo necesitamos un archivo con el nombre del campo igual y el valor que le corresponde, el archivo debe de estar en la carpeta root del proyecto, por lo que la lectura que debemos hacer solo necesitamos el código siguiente.


// importación de la clase que permitira traer datos del archivo
import java.util.ResourceBundle; 

public class TestResourceBundle {
 public static void main(String []a)
 {
  System.out.println("Leyendo datos de archivos");
  // se crea el objeto en base al archivo que se quieren leer lod datos
  ResourceBundle rb = ResourceBundle.getBundle("datos");
  //una vez creada la instancia con rb podemos traer los valores con el comando get
  // utilizamos segun la variable o dato que queremos sacar
  String nombre = rb.getString("nombre");
  System.out.println("El dato leido de nombre es " + nombre );
  String email = rb.getString("email");
  System.out.println("El dato leido de email es " + email );
  String dom = rb.getString("domicilio");
  System.out.println("El dato leido de domicilio es " + email );

 }
}

martes, 8 de julio de 2014

[Windows] Convertir tu computadora en un router inalambrico



Muchas veces tenemos una conexión ya sea cableada o por medio de una banda ancha de 3g y necesitamos compartir internet por ejemplo a los dispositivos móviles por ejemplo en un celular que no tiene datos por lo tanto podemos hacer que nuestra computadora comparta el internet.


Primero ya que tenemos nuestra computadora ya con internet abriremos una terminal con privilegios de administrador. Escribiremos lo siguiente:






netsh wlan set hostednetwork mode=allow ssid=redquecompartira key=1234567890


Ya una vez creada ya vamos a iniciar nuestra red

netsh wlan start hostednetwork







Ya lo único que hacemos es compartir la conexión, para esto nos vamos a nuestro adaptador en recursos de red, damos clic derecho en la conexión con internet y damos en la pestaña compartir en este caso la red que cree es equivalente a la conexión de área local por lo que la marco y damos aceptar







Ya por ultimo si tienen algun firewall que no permita la conexion deshabilitelo o configurelo para que permita.

Listo ya tenemos una conexion de red inalambrica que pueda a utilizarse con cualquier dispositivo

jueves, 19 de junio de 2014

[JAVA EE] Autentificación de usuarios usando JAAS en aplicación web

Java Authentication and Authorization Service es una plataforma que permite a las aplicaciones de java crear ambientes seguros para las aplicaciones, los cuales puedes restringir que tipo de peticiones acepta en base a los encabezados HTTP y que usuarios tienen permisos.  

Lo que vamos a hacer es una pequeña aplicación implementada en Glassfish 4.0 y utilizando Netbeans en la cual en una aplicación web tendremos cuatro archivos jsp, uno de bienvenido a la aplicación (index.jsp), uno de login (login.jsp) que nos ayudara a pedir las credenciales de los usuarios, una de error (error.jsp) que se mostrara cuando el usuario no de las credenciales correctas y por ultimo tendremos una pagina inicial (index.jsp) puesta en una carpeta adicional (protegido) que permitira dar la bienvenida a los usuarios que fueron autentificados de manera correcta.

Empezamos creando una aplicación web para java utilizando Java EE 7 


Una vez creado tu proyecto procedemos a crear cada uno de los archivos  en este caso ya nos crea iun index, aunque no sea jsp porque depende la versión de netbeans puedemos dejarlo con el mismo codigo. En este caso el archivo index.jsp tendra el siguiente codigo

<!DOCTYPE html>

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>Bienvenido a mi aplicación </div>
    </body>
</html>

Damos botón derecho y creamos el archivo error.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Error !</h1>
    </body>
</html>

 Damos clic derecho en web pages y ponemos Folder en este caso le pongo el nombre de protegido






Damos clic derecho en dicho folder creado y damos clic derecho new -> Jsp y creamos el index.jsp que nos indicara que ya estamos en un ambiente protegido

<!DOCTYPE html>

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>Bienvenido a entorno protegido </div>
    </body>
</html>

Por ultimo creamos en la carpeta de Web Pages el login.jsp que nos permitira hacer la autentificacion con el nombre del usuario y contraseña. El cuadro de texto del nombre debe llamarse j_username, el cuatro de texto debe de llamarse j_password por ultimo solo la acción del submit del formulario debe de llamar a j_security_check

Codigo de login.jsp

Listo!, Ahora solo tenemos que configurar nuestro sitio para esto damos clic derecho en el proyecto y agregamos el deployment descriptor que es quien manejara los parametros de los datos protegidos.

Primero le marcamos en el web.xml como se hara la autentificación

Luego posteriormente damos las restricciones para la carpeta que ese estara utilizando como protegida en el web.xml





Y por ultimo damos de alta los roles que son necesarios

Aquí muestro el web.xml completo



<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
          version="3.1">
    <!-- Configuracion de mi login -->  
    <login-config>            
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
        </form-login-config>            
    </login-config>      
       <!-- Configurar los roles de seguridad -->
       <security-role>
           <role-name>admin</role-name>
       </security-role>
       <!-- Vienen las restricciones de mi sitio -->
       <security-constraint>
           <display-name>Contexto Seguro</display-name>
           <web-resource-collection>
               <web-resource-name>admin</web-resource-name>
               <url-pattern>/protegido/*</url-pattern>            
           </web-resource-collection>
           <auth-constraint>
               <role-name>admin</role-name>
           </auth-constraint>
       </security-constraint>
       <!-- ............................. -->
    <session-config>                                
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>


Ahora solo mapearemos los roles con los grupos de los usuarios ya que en el repositorio de datos estaremos trabajando con grupos, para eso ocupamos un xml que permita ese puente con el servidor en el caso de glassfish utilizamos glassfish-web.xml su codigo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
  <context-root>/jaas</context-root>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class' java code.</description>
    </property>
  </jsp-config>
  <security-role-mapping>
    <role-name>admin</role-name>
    <group-name>Users</group-name>        
</security-role-mapping>
</glassfish-web-app>

Por ultimo solo configuraremos un usuario, para esto ponemos en nuestro navegador la dirección
localhost:4848

Esto abrira el panel de configuración de Glassfish , para eso nos vamos a ir a la opcion de configuración -> Server config -> Seguridad -> Dominios -> file, es la autentificacion que tiene por default el servidor por lo que agregaremos un usuario.


Ahi agregamos un usuari, no ilvidemos que debe de ser el grupo Users porque es como lo mapeamos en el XML del glassfish

Con esto cada que vayamos a entrar a localhos:8080/mi proyecto/protegido automaticamente el servidor tratara de verificar que tienen una sesión activa si no la tiene lo mandara a login, el cual le pedira los datos de usuario y contraseña que son los que dio de alta, si los da erroneos lo mandara directamente a error.jsp, si los da correcto les permitira entrar.