| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? La mejor opcion es hacer un manejo de roles en tu aplicacion, sin embargo esta opcion es un poco ams compleja e implica que tenags un servidor un poco mas grande que solo Tomcat trabajando de forma independiente. En tu caso te bastaria con crear un Bean o clase lamada Usuario, donde dentro tengas el nivel de acceso. ejemplo: Código PHP: Código PHP: Código PHP:
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Hola de nuevo, estoy teniendo problemas a la hora de validar al usuario segun su nivel de acceso, supongo que al momento de dejar el Objeto usuario en sesion, ya que estoy trabajando un poco diferente el tema del login, posteo mi Servlet y el codigo del jsp para que me puedas ayudar, gracias:
Código:
Y este es el codigo que agrego al Servlet, sin embargo me da error cuando declaro == 1 ( por ejemplo):public class login extends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html"); PrintWriter out = response.getWriter(); String lognombre=""; String logclave=""; String strQuery= ""; PreparedStatement instruccion=null; Connection con = conexionbd.getConexion(); ResultSet resultado=null; HttpSession session = request.getSession(true); try { if(request.getParameter("NOMBRE")!=null && request.getParameter("NOMBRE")!="" && request.getParameter("CLAVE")!=null && request.getParameter("CLAVE")!="") { lognombre = request.getParameter("NOMBRE").toString(); logclave = request.getParameter("CLAVE").toString(); strQuery="select * from usuario where nombre='"+lognombre+"' and clave='"+logclave+"'"; System.out.println(strQuery); instruccion = con.prepareStatement(strQuery); resultado = instruccion.executeQuery(strQuery); int count=0; while(resultado.next()) { session.setAttribute("nombre",resultado.getString(2)); session.setAttribute("id_nivel",resultado.getInt(5)); count++; } if(count>0) { response.sendRedirect("../principal.jsp"); } else { response.sendRedirect("../error.jsp"); } } else { response.sendRedirect("login.jsp"); } System.out.println("Connected to the database"); con.close(); System.out.println("Disconnected from database"); } catch (Exception e) { e.printStackTrace(); } } }
Código:
Seguro que es un problema con el set.Attribute para el nivel de usuario, por cierto, al momento del login solo pide usuario y contraseña, espero puedan ayudarme, gracias de antemano, un saludo!! <% if(session.getAttribute("nombre") ==null) { response.sendRedirect("../error.jsp"); } if(session.getAttribute("id_nivel") ==1) { response.sendRedirect("../principal.jsp"); } %> |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? El metodo getAttribute devuelve un Objetc es pore sto que da error. Trata de convertir ese Object en un objeto Integer o bien pregunta asi Código PHP:
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Gracias de nuevo por el consejo, efectivamente lo he hecho asi, y ya no tira ningun error, sin embargo aun permite el acceso a usuarios cuyo nivel no sea 1 (segun este ejemplo), no se mucho acerca de trabajar con variables de sesion, podrias decirme si estoy haciendo algo mal en el Servlet quiza? funciona perfectamente para ingresar al sistema e incluso para no permitir el acceso a usuarios que no se han logueado, pero el acceso por nivel sigue sin funcionar, gracias de nuevo ,espero me puedan ayudar, un saludo!! :D |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Primeroq ue nada comprueba que efectivamente estes pasando el nivel de usuario y no otra cosa, quiza la consulta no se ejecuta o estas obteniendo otro campo de la base de datos. Seria puebo un: Código PHP: Saludos
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Este es el codigo completo:
Código:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.sql.*; import java.sql.*; import conexion.conexionbd; public class login extends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html"); PrintWriter out = response.getWriter(); String lognombre=""; String logclave=""; String strQuery= ""; PreparedStatement instruccion=null; Connection con = conexionbd.getConexion(); ResultSet resultado=null; HttpSession session = request.getSession(true); try { if(request.getParameter("NOMBRE")!=null && request.getParameter("NOMBRE")!="" && request.getParameter("CLAVE")!=null && request.getParameter("CLAVE")!="") { lognombre = request.getParameter("NOMBRE").toString(); logclave = request.getParameter("CLAVE").toString(); strQuery="select * from usuario where nombre='"+lognombre+"' and clave='"+logclave+"'"; System.out.println(strQuery); instruccion = con.prepareStatement(strQuery); resultado = instruccion.executeQuery(strQuery); int count=0; while(resultado.next()) { session.setAttribute("nombre",resultado.getString(2)); session.setAttribute("id_nivel",resultado.getInt(5)); count++; } if(count>0) { response.sendRedirect("../test.jsp"); } else { response.sendRedirect("../error.jsp"); } } else { response.sendRedirect("../error.jsp"); } System.out.println("Connected to the database"); con.close(); System.out.println("Disconnected from database"); } catch (Exception e) { e.printStackTrace(); } } } Cita: Gracias de nuevo por el consejo, efectivamente ejecute el out.println en la pagina principal.jsp para capturar nombre y id_nivel de esta manera:
Iniciado por goncafa Primeroq ue nada comprueba que efectivamente estes pasando el nivel de usuario y no otra cosa, quiza la consulta no se ejecuta o estas obteniendo otro campo de la base de datos. Seria puebo un: Código PHP: Saludos
Código:
Y funciona! me muestra el nombre y id_nivel correspondiente al loguearme, no entiendo cual es el error porque la sesion esta recogiendo el id_nivel, algun consejo? dejo el Servlet completo con los import arriba, gracias de nuevo, un saludo :S <% out.println("Nombre:" + session.getAttribute("nombre")); out.println("Nivel de usuario:" + session.getAttribute("id_nivel")); %> |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? De acuerdo, pues si en el JSP te esta imprimendo los valores correstos entonces la falla no esta en el Servlet. Disculpa que te hagamos pegar y pegar codigo, pero a veces es la unica forma de evr que sucede. Podrias por favor postear el codigo de la JSP ahora y los valores que te imrpime la pagina en Nombre y Nivel usuario por favor. ;) Saludos
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? No hay problema! realmente les agradezco toda la ayuda, y las disculpas del caso por quitarles su tiempo, en estos momentos, estoy trabajando con un archivo JSP "en blanco" podria decirse para hacer las pruebas correspondientes, asi que solo tengo esto: Esta es la pagina a la que redirige el Servlet cuando se loguea el usuario exitosamente (test.jsp):
Código:
Y si sirve de algo pongo el login.jsp<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> <% out.println("Nombre:" + session.getAttribute("nombre")); out.println("Nivel de usuario:" + session.getAttribute("id_nivel")); %> </body> </html>
Código:
Utilizo loginbean.jsp para capturar los datos de los campos de texto y redirigo a login.java (mi archivo Servlet):<html> <head> </head> <body> <form name="loginform" method="post" action="loginbean.jsp"> <br><br> <table align="center"><tr><td><h2>Login Authentication</h2></td></tr></table> <table width="300px" align="center" style="border:1px solid #000000;background-color:#efefef;"> <tr><td colspan=2></td></tr> <tr><td colspan=2> </td></tr> <tr> <td><b>Login Name</b></td> <td><input type="text" name="NOMBRE" value="NOMBRE"></td> </tr> <tr> <td><b>Password</b></td> <td><input type="password" name="CLAVE" value="CLAVE"></td> </tr> <tr> <td></td> <td><input type="submit" name="Submit" value="Submit"></td> </tr> <tr><td colspan=2> </td></tr> </table> </form> </body> </html>
Código:
El resultado que muestra la pagina principal seria el siguiente:<HTML> <HEAD><TITLE>DataBase Search</TITLE></HEAD> <BODY> <jsp:useBean id="db" scope="request" class="beans.Usuario" > </jsp:useBean> <% String nombre = request.getParameter("NOMBRE"); String clave = request.getParameter("CLAVE"); %> <jsp:forward page="../login"> <jsp:param name="nombre" value="<%=db.getNombre()%>" /> <jsp:param name="clave" value="<%=db.getClave()%>" /> </jsp:forward> </body> </html> Hello World! Nombre:omejia Nivel de usuario:1 Gracias como siempre!:D (Iba a poner una imagen con el resultado del JSP pero al parecer aun no tengo antiguedad suficiente en el sitio |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Y dime una cosa, donde esta entonces el if que valida el niveld e usuario que es el que no te esta funcionando?
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Realmente pensaba que solo capturando el id_nivel en una variable de sesion podria compararlo luego en el JSP, cuando trate de hacer el if en el Servlet me daba error ,me imagino que por ser un INT, no podia hacer una comparacion con != null, por ejemplo. En este caso, debo hacer el if entonces junto con el nombre y clave en el Servlet? las disculpas del caso, JAVA es nuevo para mi, podrias darme un ejemplo? gracias :) EDITO: No se si te refieres al IF en el Servlet o en el JSP, porque en el test.jsp no lo he colocado porque hacia pruebas con el out.println, sin embargo para validarlo en el JSP segui tus indicaciones de esta manera:
Código:
<% if(session.getAttribute("nombre") ==null) { //El usuario no esta logeado, haces lo que corresponda... response.sendRedirect("../error.jsp"); } if(session.getAttribute("id_nivel").toString().equals("1")) { //El usuario no esta logeado, haces lo que corresponda... response.sendRedirect("../principal.jsp"); } %> |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Solo agrega esto al if y ya && ((String)session.getAttribute("id_nivel")).equals( "1") Código PHP: |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Realmente en tu test.jsp es donde me interesa que veas si llegan correctamente los datos por session. Llegas en algun momento a la pagina test.jsp? Lo otro, perfectamente puedes hacer el if en el servlet y hacer ahi la redireccion donde corresponda. Saludos
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Agregue la linea que me comentaste: Código PHP: Código PHP: Código PHP: Última edición por saman0suke; 20/05/2009 a las 11:10 |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Pues si llego a test.jsp perfectamente,incluso cuando me valido con un usuario que no tenga nivel 1, es como si no hiciera la comprobacion de id_nivel, dejando pasar a un usuario con cualquier nivel. |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Bueno, ahora ya funciona el acceso segun niveles de la siguiente manera: Código PHP: Código PHP: |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? No se si sea este tu error o te equivocaste en tipearlo aqui, pero el 1 deberias ponerlo entre comillas, pues lo estas tratando como un String. Código PHP:
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Ya lo hice de esa manera y no pasa nada,es como si no hiciera la validacion, tomando el trozo de codigo que Drac94 recomendo he logrado hacer la validacion justo al momento de loguearte redirigiendo a varias paginas segun lo decida, sin embargo, me gustaria tambien que al estar logueado en el sistema, al dar click sobre una pagina JSP no autorizada hiciera la validacion y eso no funciona, este es el ultimo codigo que manejo, disculpen las molestias, y si en algun momento no me es explicar,es que recien aprendo en JAVA, gracias :) login.java Código PHP: principal.jsp Código PHP: |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Veo que aun lo tienes sin comillas... Prueba esto en tu principal.jsp Justo antes de la validacion escribe esto: Código PHP: Saludos
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Cuando me logueo con un usuario nivel 1, me marca true,y con un usuario que no posee nivel 1 me marca false. No lo estaba tratando con comillas, porque no lo habia declarado como String en el Servlet (quiza este haciendo algo mal), simplemente lo tengo asi: Código PHP: |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Veras, en el mismo Servlet es un entero, por ende no necesitas comillas, sin embargo al poner un dato en session, sea cual sea este, cuando lo sacas se retorna como Object, es por esto que llamamos a su metodo toString que retorna el contenido como un String, y es por esto que la validacion en el jsp si debes hacerla con comillas. Saludos
__________________ se despide hasta la proxima Gonzalo Castillo |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Ahora lo entiendo, muchas gracias por la aclaracion, voy a probar a ver que pasa, para validar nivel de acceso en una pagina JSP, debo retirar los if de nivel que tengo en el Servlet? o en teoria deben de funcionar ambos sin problema? gracias goncafa ! |
| ||||
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario? Muchas gracias a ambos!! ahora funciona todo perfectamente, realmente no tenia claro el concepto de las variables de sesion, y por ello siempre declaraba la condicion sin comillas, ahora funciona y segun el nivel de acceso de le restringe la entrada al usuario a determinada pagina JSP, nuevamente gracias por la paciencia con este novato en JAVA, y me alegro de haberme encontrar con esta gran comunidad, un saludo !! al final ha quedado de la siguiente manera: Código PHP: |