Actualizado: How-to Configurar ADF Security y generar una pagina de Login para tu aplicación

(La siguiente configuracion no funciona para las versiones 11.1.1.4 y 11.1.1.5 existe un bug que aun no ha sido resuelto.)

(Para poder resolver el bug que existe para las versiones de 11.1.1.4 y 11.1.1.5 visiten el siguiente articulo Oracle Radio)

Si tienes una aplicación web hecha con ADF y quieres añadirle seguridad, este post se encargara de explicar paso a paso como configurar ADF Security además de ayudarte a crear una pagina de login para el uso y acceso a tu aplicación

– Crear una pagina Login para tu aplicacion.

Comenzaremos creando y configurando la pagina de Login para que esta nos permita el acceso a nuestra aplicación.

– Creamos una nueva aplicación (Fusion Web Application)dentro de JDeveloper (11.1.1.3).

Abrimos nuestro archivo adfc_config y arrastramos una nueva Vista a la cual llamaremos main.

adfc-config

Damos doble clic con lo que parecera el asistente para crear, para crear la pagina la cual llamaremos main.jspx.

Creamos una nueva pagina dentro de nuestro proyecto ViewController quedando de la siguiente manera.

La pagina contiene un inputText para el usuario, un inputText para la contraseña este ultimo debe tener la propiedad “Secret” en el valor “true”, además de un boton para ejecutar la acción de login.

A continuación hay que crear una clase java para validar el usuario y contraseña que se hara al momento de dar click sobre el botón de Login.

Login.java

public class Login {
private String _username;
private String _password;

public void setUsername(String _username) {
this._username = _username.toLowerCase();
}

public String getUsername() {
return _username;
}

public void setPassword(String _password) {
this._password = _password;
}

public String getPassword() {
return _password;
}

public String doLogin() {
String un = _username;
byte[] pw = _password.getBytes();
FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)ctx.getExternalContext().getRequest();
try {
Subject subject = Authentication.login(new URLCallbackHandler(un, pw));
weblogic.servlet.security.ServletAuthentication.runAs(subject, request);

String loginUrl = "/adfAuthentication?success_url=/faces/main";
HttpServletResponse response = (HttpServletResponse)ctx.getExternalContext().getResponse();
sendForward(request, response, loginUrl);
} catch (FailedLoginException fle) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Incorrect Username or Password", "An incorrect Username or Password was specified");

ctx.addMessage(null, msg);
} catch (LoginException le) {
reportUnexpectedLoginError("LoginException", le);
}
return null;
}

private void sendForward(HttpServletRequest request, HttpServletResponse response, String forwardUrl) {
FacesContext ctx = FacesContext.getCurrentInstance();
RequestDispatcher dispatcher = request.getRequestDispatcher(forwardUrl);
try {
dispatcher.forward(request, response);
} catch (ServletException se) {
reportUnexpectedLoginError("ServletException", se);
} catch (IOException ie) {
reportUnexpectedLoginError("IOException", ie);
}
ctx.responseComplete();
}

private void reportUnexpectedLoginError(String errType, Exception e) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Unexpected error during login",
"Unexpected error during login (" + errType + "), please consult logs for detail");
FacesContext.getCurrentInstance().addMessage(null, msg);
e.printStackTrace();
}
}

Este bean que acabamos de crear tenemos que asociarlo como una bean de request dentro de nuestro archivo adfc-config.xml:

La funcion que se encargara de ejecutar y validar que el usuario y contraseña sean los correctos es doLogin esta función enviara el usuario y contraseña al servlet de ADF Security para que este valide que el usuario que intenta loguearse es el correcto.

Ahora tenemos que asociar la funcion doLogin a nuestro boton Login, esto lo haremos seleccionando nuestro boton modificaremos su propiedad Action con el valor #{loginBean.doLogin}.

A nuestros inputText usuario y contraseña cambiaremos su propiedad Value con los siguientes valores #{loginBean.username} y #{loginBean.password}

Lo siguiente sera crear una pagina de bienvenida al usuario que entro a nuestra aplicación, entonces creamos una nueva pagina que se llame main.jspx esta pagina puede contener lo que ustedes deseen.

– Configurar ADF Security.

Bien es momento de configurar ADF Security.

  • En el menu de Application de JDeveloper se encuentra la opción Secure, dentro de ella elegiremos la opción Configure ADF Security.
  • Elegimos la opción ADF Authentication and Authorization
  • Lo siguiente es elegir el tipo de autenticación en este caso sera del tipo Form Login y dentro de los campos elegimos nuestra pagina login.jspx
  • En el siguiente paso elegimos No Automatic Grants ya que configuraremos los permisos de cada pagina mas adelante.
  • El siguiente paso es elegir a que pagina de nuestra aplicación se dirigira nuestra aplicacion cuando el login sea correcto en este caso el valor que debemos poner sera nestra pagina principal o de bienvenida que es main.jspx
  • Por ultimo veremos el resumen de nuestra configuración y damos clic en Finish

– Configurar permisos para accesar a nuestras paginas.

Vamos a configurar los permisos que tendran los usuarios para acceder a las paginas.

Lo primero que hay que hacer es entrar en el Menu Application en JDeveloper, elegir la opcion Secure dentro de esta se encuentra la opción ADF Policies

Esto nos mostrara la siguien pantalla

Dentro de esta pagina elegimos Login, damos clic sobre el simbolo verde y añadimos el anonymous-role, dentro del panel de Actions aseguremos que esta seleccionada la opción de View con esto le estamos diciendo a la aplicación que cualquiera podra accesar a esta pagina.

Dentro de esta pagina elegimos main, damos clic sobre el simbolo verde y añadimos el authenticated-role, dentro del panel de Actions aseguremos que esta seleccionada la opción de View con esto le estamos diciendo a la aplicación que solo las persona que este autenticadas a esta podran visualizar la pagina.

Bien con esto tenemos terminada nuestra configuracion de ADF Security, ahora a probar la aplicación.

Bien con esto damos por concluido este post.. Esperando como siempre les sea de ayuda y no duden en comentar.

19 comentarios en “Actualizado: How-to Configurar ADF Security y generar una pagina de Login para tu aplicación

  1. Aquji tienes las librerias que necesitas importar:import javax.faces.application.FacesMessage;import javax.faces.context.FacesContext;import javax.security.auth.Subject;import javax.security.auth.callback.CallbackHandler;import javax.security.auth.login.FailedLoginException;import javax.security.auth.login.LoginException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import weblogic.security.SimpleCallbackHandler;import weblogic.security.services.Authentication;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import java.io.IOException;import weblogic.security.URLCallbackHandler;Saludos

  2. mikeintoch que pena molestarte, de esta manera la aplicación hace el logeo con los usuarios de la base de datos?? si es asi no hay una manera de hacerlo contra una tabla en la base de datos donde se encuentra la informacion de los usuarios que utilizaran a la aplicacion, muchas gracias

  3. Que tal,Esta aplicación hace la autenticación contra los usuarios o los security providers que hayan sido configurados apra weblogic, espera el siguiete post el cual solucionara el problema que tu tienes. espero tenerlo el dia juevesSaludos

  4. Que tal optimista,El usuario lo puedes crear de dos forma1. Mediante la consola de administracion de weblogic2. Utilizando Del menu de Security de Jdeveloper en la parte de users.Para este ejemplo no se creo un rol para el usuario, aqui se esta utilizando un rol que ya esta definido dentro de los aplicativos que es el autenticated-role, este rol se asigna automaticamente a los usuarios que se han autenticado de manera satisfactoria dentro de la aplicacion.Si tu requieres agregar un rol diferente para los usuarios ouedes hacer uso de las opciones:1. Creando un rol en la consola de administracion de weblogic.2. Mediante el menu de Security de JDeveloper en la opciones Users and RolesEspero te sea de ayuda lo anteriorSaludos

  5. Gracias por tu ayuda. Ya he resuelto los problemas que habia encontrado. Y con esto pude terminar una pequeña aplicacion que administra los usuarios y permisos, pudiendo dar de alta usuarios y dar permisos a estos .Saludos

  6. Hola… tengo dos preguntas, la primera es que por qué cuando ejecuto la página de login, al entrar con un usuario registrado me manda un error que no encuentra la URL adecuada.? sin embargo cuando ejecuto la página de main.jspx esa si realiza todo bien??

    Mi segunda pregunta es, que solo reconoce los usuario que le doy manualmente utilizando el menu de secure > users y no los que tengo en mi web logic

    • Hola Claudia,
      Creo saber lo que esta pasando, en Login.java estoy dirigiendo hacia la siguiente dirección “faces/main” lo que pasa es que posiblemente dentro de tu archivo adfc-config.xml no agregaste la pagina main.jspx, y es por eso que parece no encontrar la pagina requerida. Parece que omiti este paso en el articulo lo correjire de inmediato.

      Ahora bien para tu segunda pregunta la respuesta seria, que no estoy seguro de que configuracion tengas en tu security providers si pudieras darme alguna referencia como una imagen o la manera en que los tienes configurados podria ayudarte.

      Saludos y quedo en espera de mas comentarios

  7. Estiamdo, sabes qu eyo me dedico a base de datos, servidores y programo en Forms y en java utilzo el netbeans y tambien le hago al PHP , pero realmente me encanto forms 11g pero , aca necesito realizar un sistema medico apra una clínica y deseo realizarla en adf para desplegarlo en glassfish en vista d eque al ultima versión es gratuita para desarrollo y despliegue de adf, he realizado unos propgramitas sencillos ya que recién son 3 días de que lo he visto con jdeveloper , pero deseo saber como realizar el sapecto de seguridades de acceos directamente desde la base que seria mysql, llevándome desdfe la tabla el susurio , rol y als pagians que tienen acceso, podrias ayudarme dándome una idea de donde partir ya que ese es el unto que lo veo complicado ya que como te menciono son 3 días recién que lo conozco al adf.
    Muchas gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s