Control de navegación con faces

Estoy haciendo una aplicación web con java utilizando la infraestructra visual web jsf que trae el netbeans 6.5.1. La aplicación la desarrollo sobre un motor mysql 5. Ya tengo toda la aplicación funcionando pero al momento de hacer pruebas de reglas de navegación me di cuenta que me hacia falta el control de la sesión o un cookie o algo que me ayudara a controlarlo.
Lo que quiero hacer es el usuario al seleccionar el botón de cerrar sesión ademas de cerrar y destruir todo el sessionbean y el facescontext, destruya toda la información o algo similar por que en este momento de la aplicación si por ejemplo la página de ingreso es index.jsp y el usuario no tiene usuario y contraseña muy tranquilamente puede escribir index2.jsp e ingresar a la aplicación y adicional a esto, si con anterioridad un usuario con usuario y contraseña había ingresado, el navegador le va a cargar todos los datos anteriores, generando una falla en seguridad la verraca.
Agradezco toda la ayuda posible en esto ya que la documentación que he encontrado habla de un FacesServlet pero no es muy profundo y adicional a esto no encuentro como realizar lo que necesito desde este.

1 Respuesta

Respuesta
1
Tu consulta es sencilla, para manejar los datos de sesión en java se usa un servlet, no hace falta que uses un FaceServlet, con un Servlet es suficiente, mira, te explico, el servlet es una clase que se encarga de manejar todas las reglas de negocio, o sea toda la programación que va a tener tu página web, puedes usar un servlet por página programada o puedes usar un solo servlet para toda la aplicación, depende de tu nivel de programación, bueno, para crear una sesión se usa un solo servlet, es decir, en tu página de administrador o en tu página de login al momento de ingresar tu usuario y tu contraseña tendrías algo como esto y mandarlos al servlet, en el servlet tendrás algo como esto
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// if (request.getParameter("type").equals("login")) {
String usuario = request.getParameter("usuario");
String pass = request.getParameter("pass");
boolean ingreso;
try {
ingreso = utils.checkLogin(usuario, pass); //funcion para validar el ingreso en mysql
} catch (Exception ex) {
throw new IOException(ex.getMessage());
}
//habilitar la sesion
// throw new IOException(usuario+));
if (ingreso == true) {
String nombre;
int perfil;
try {
nombre = utils.dameNombre(usuario);
perfil=utils.damePerfil(usuario);
} catch (SQLException ex) {
throw new IOException(ex.getMessage());
}//depuracion
String[]perfiles=new String[]{"administrador","supervisora","consultora"};
HttpSession sesion = request.getSession(true);//crear la sesion
sesion.putValue("logger", nombre); //asignar valor global de sesion
sesion.putValue("id", usuario); // asignar valor global de sesion
response.setContentType("text/plain");
response.sendRedirect("http://localhost:8084/Naturation/"+perfiles[(perfil-1)]+".jsp"); // redireccionar
} else {
response.sendRedirect("http://localhost:8084/Naturation/redireccionador.html"); // redireccionar
}
}
Con este pedazo de código coges los datos enviados desde la página al servlet, los validas, habilitas la sesión y le pones los parámetros a la sesión. Ahora, luego para recuperarlos en otro servlet en el nuevo servlet por ejemplo, el servlet de consultas por catalogo, para recuperar los datos usas esto.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
HttpSession sesion = request.getSession(); // recuperar la sesion
String DNI = sesion.getValue("id").toString(); // sacar el parametro insertado
// TU CODIGO A DESARROLLAR
}
Y ese es el tardo de sesiones de java, es fácil, es sencillo, si es que no sabes como mandar del html o el jsp, o el jsf al servlet es usar una función javascript para validar los datos del formulario y luego recdireccionar al servlet añadiendo los valores de los campos en el link de direccionamiento.
Cualquier consulta házmela saber.
Hola,
De antemano muchas gracias por tu respuesta. Esa opción ya la he intentado pero no me funciona y veo que no funciona es por que no estoy seguro de que el servlet este funcionando correctamente. Me gustaría facilitarte el proyecto y el script de mysql para que lo vieras, si gustas enviame un email para enviarte el link de descarga.
En caso contrario me gustaría ver algún ejemplo más completo para ver donde podría estar el error.
Gracias
Estoy completamente seguro de que el servlet no esta funcionando porque no lo estas llamando correctamente en el submit de tu botón.
A ver, mi correo es [email protected] mandame un mail con el link de descargar y lo veo.
Dime, ¿piensas enviar tu proyecto a mi mail para que lo revise o simplemente vas a dejar la pregunta en el aire?
Listo revisa el correo ya te envíe toda la información pertinente.
Ok, si ya estoy en eso, veamos...
Ya intente todo y tu proyecto no me corre por nada, ni en uno que creo ni en el tuyo, como te comente se hace por variables, también puedes poner código autogenerado para más seguridad, ese código puede cambiar cada vez que accedes a una página y guardarlo en el sessionbean, o puedes usar el requestbean para guardar estas variables ya que en el requestbean solo se guardan los datos por cada llamad, luego se destuyen y luego en el _init haces la valdacion y si no es correcta, redireccionas a otra página.
Espero haberte ayudado en algo. =S

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas