Foros del Web » Programación para mayores de 30 ;) » Java »

¿Como restringir a un pagina JSP segun el nivel de usuario?

Estas en el tema de ¿Como restringir a un pagina JSP segun el nivel de usuario? en el foro de Java en Foros del Web. Hola, tengo una tabla usuario que maneja un id_nivel, y quisiera restringir el acceso a los usuarios a ciertas paginas JSP, que no posean nivel ...
  #1 (permalink)  
Antiguo 19/05/2009, 12:42
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
¿Como restringir a un pagina JSP segun el nivel de usuario?

Hola, tengo una tabla usuario que maneja un id_nivel, y quisiera restringir el acceso a los usuarios a ciertas paginas JSP, que no posean nivel de administrador, por ejemplo, asumo que tengo que utilizar codigo en cada pagina JSP trabajando con la variable de sesion guardada al momento de loguearme, sin embargo, no se como comenzar, les agradeceria su ayuda, muchas gracias de antemano, un saludo :)
  #2 (permalink)  
Antiguo 19/05/2009, 13:02
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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:
public class Usuario {
    private 
String userName;
    private 
Long nivelAcceso;

    public 
Usuario() {
        
super();
    }

    public 
void setUserName(String userName) {
        
this.userName userName;
    }

    public 
String getUserName() {
        return 
userName;
    }

    public 
void setNivelAcceso(Long nivelAcceso) {
        
this.nivelAcceso nivelAcceso;
    }

    public 
Long getNivelAcceso() {
        return 
nivelAcceso;
    }

En tu JSP o servlet seria cosa de dejar este objeto en session:
Código PHP:
Usuario usuario = new Usuario();
usuario.setUserName("goncafa");
usuario.setNivelAcceso(1L);
session.setAttribute("usuario"usuario); 
Luego en tus demas paginas o Servlets solo capturas tu objeto y validas:
Código PHP:
Usuario usuario = (Usuariosession.getAttribute("usuario");

if(
null == usuario) {
    
//El usuario no esta logeado, haces lo que corresponda...

    
return;
}

if(
usuario.getNivelAcceso == 1) {
    
//El usuario tiene nivel acceso 1, haces lo que corresponda a este nivel...



Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 19/05/2009, 13:43
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario?

Muchisimas gracias! voy a hacer las pruebas correspondientes, para hacerlo funcionar, un saludo! :)
  #4 (permalink)  
Antiguo 19/05/2009, 17:03
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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:
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();
      }
  }
}
Y este es el codigo que agrego al Servlet, sin embargo me da error cuando declaro == 1 ( por ejemplo):

Código:
<%

if(session.getAttribute("nombre") ==null) {

response.sendRedirect("../error.jsp");
}

if(session.getAttribute("id_nivel") ==1) {

response.sendRedirect("../principal.jsp");
}

%>
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!!
  #5 (permalink)  
Antiguo 19/05/2009, 18:03
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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:
if(session.getAttribute("id_nivel").toString().equals("1")) 
Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #6 (permalink)  
Antiguo 19/05/2009, 22:15
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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
  #7 (permalink)  
Antiguo 20/05/2009, 08:10
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario?

puedes poner todo el codigo del servlet completo
  #8 (permalink)  
Antiguo 20/05/2009, 08:12
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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:
out.println("Nivel de usuario:" session.getAttribute("id_nivel")); 
de esta forma puedes validar que es lo que efectivamente viene por session.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #9 (permalink)  
Antiguo 20/05/2009, 10:00
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario?

Cita:
Iniciado por drac94 Ver Mensaje
puedes poner todo el codigo del servlet completo
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:
Iniciado por goncafa Ver Mensaje
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:
out.println("Nivel de usuario:" session.getAttribute("id_nivel")); 
de esta forma puedes validar que es lo que efectivamente viene por session.

Saludos
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:

Código:
<%
        out.println("Nombre:" + session.getAttribute("nombre"));
        out.println("Nivel de usuario:" + session.getAttribute("id_nivel"));
        %>
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
  #10 (permalink)  
Antiguo 20/05/2009, 10:06
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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
  #11 (permalink)  
Antiguo 20/05/2009, 10:17
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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:
<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>
Y si sirve de algo pongo el login.jsp

Código:
<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>&nbsp;</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>&nbsp;</td></tr>
</table>
</form>
</body>
</html>
Utilizo loginbean.jsp para capturar los datos de los campos de texto y redirigo a login.java (mi archivo Servlet):

Código:
<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>
El resultado que muestra la pagina principal seria el siguiente:

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
  #12 (permalink)  
Antiguo 20/05/2009, 10:20
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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
  #13 (permalink)  
Antiguo 20/05/2009, 10:28
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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");
}

%>
  #14 (permalink)  
Antiguo 20/05/2009, 10:34
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
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:
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 requestHttpServletResponse 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>&& ((String)session.getAttribute("id_nivel")).equals("1"))
          {
            
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();
      }
  }

  #15 (permalink)  
Antiguo 20/05/2009, 10:43
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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
  #16 (permalink)  
Antiguo 20/05/2009, 10:44
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario?

Agregue la linea que me comentaste:

Código PHP:
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 requestHttpServletResponse 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  && ((String)session.getAttribute("id_nivel")).equals"1"))
          {
            
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();
      }
  }

y la pagina principal.jsp lleva esto:

Código PHP:
<&#37;

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");
}

%> 
Sin embargo, no me muestra nada, ahora se queda en blanco como queriendo procesar loginbean.jsp, que lleva esto actualmente:

Código PHP:
<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
Si estoy haciendo algo mal, las disculpas del caso, entiendo que solo deberia agregar el codigo, pero no pasa nada, un saludo y gracias :)

Última edición por saman0suke; 20/05/2009 a las 11:10
  #17 (permalink)  
Antiguo 20/05/2009, 10:50
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario?

Cita:
Iniciado por goncafa Ver Mensaje
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
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.
  #18 (permalink)  
Antiguo 20/05/2009, 11:31
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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:
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 requestHttpServletResponse 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>&& (session.getAttribute("id_nivel")).equals(1))
          {
            
response.sendRedirect("../principal.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();
      }
  }

Sin embargo, realiza la validacion al inicio de logueo, pero dentro del sistema hay varias paginas JSP a las cuales no debe acceder un determinado usuario,y si pongo un if dentro de cada JSP ya no hace caso, creo que al declarar los if dentro del JSP estoy cometiendo un error:

Código PHP:
<&#37;

if(session.getAttribute("id_nivel").toString().equals(1))  {
    
//El usuario no esta logeado, haces lo que corresponda...

response.sendRedirect("../principal.jsp");
}

%> 
Gracias por la ayuda como siempre!
  #19 (permalink)  
Antiguo 20/05/2009, 12:38
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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:
if(session.getAttribute("id_nivel").toString().equals("1"))  {
    
//El usuario no esta logeado, haces lo que corresponda...

response.sendRedirect("../principal.jsp");

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #20 (permalink)  
Antiguo 20/05/2009, 14:10
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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:
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 requestHttpServletResponse 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>&& (session.getAttribute("id_nivel")).equals(1))
          {
            
response.sendRedirect("../principal.jsp");
          }

          if(
count>&& (session.getAttribute("id_nivel")).equals(2))
          {
            
response.sendRedirect("../principal.jsp");
          }

          if(
count>&& (session.getAttribute("id_nivel")).equals(3))
          {
            
response.sendRedirect("../principal3.jsp");
          }

          else
          {
            
response.sendRedirect("../error.jsp");
          }

        }

        
System.out.println("Conectado a la base de datos");

        
con.close();
        
System.out.println("Desconectado de la base de datos");
      } catch (
Exception e) {
      
e.printStackTrace();
      }
  }

esta es la pagina que haria la validacion de nivel de acceso:

principal.jsp
Código PHP:
<%

if(
session.getAttribute("nombre") ==null) {
    
//El usuario no esta logeado, haces lo que corresponda...

response.sendRedirect("../error.jsp");
}

if(
session.getAttribute("id_nivel").equals(1))  {
    
//El usuario no esta logeado, haces lo que corresponda...

response.sendRedirect("../principal.jsp");
}
%> 
Supongo que algo tendra que ver con que ya estoy validando el usuario por nivel al momento del login, pero al menos si lo hago asi, puedo decirles a los usuarios adonde dirigirse, pero necesito que estando dentro del sistema, el usuario tenga acceso a algunas paginas y no a todas y para eso debo validarlo tambien en las JSP, espero puedan ayudarme, y muchas gracias como siempre por todo :D
  #21 (permalink)  
Antiguo 20/05/2009, 14:15
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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:
out.println("id_nivel en session?: " session.getAttribute("id_nivel") != null);
out.println("Usuario con nivel 1?: " session.getAttribute("id_nivel").toString().equals("1")); 
Si te sale true entonces deberia entrar al if sin problemas, si sale false es pq oe stas capturando mal el id_nivel o bien no esta llegando.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #22 (permalink)  
Antiguo 20/05/2009, 14:40
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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:
while(resultado.next())
          {

            
session.setAttribute("nombre",resultado.getString(2));
            
session.setAttribute("id_nivel",resultado.getInt(5));
            
count++;
          }

          if(
count>&& (session.getAttribute("id_nivel")).equals(1))
          {
            
response.sendRedirect("../principal.jsp");
          }

          if(
count>&& (session.getAttribute("id_nivel")).equals(2))
          {
            
response.sendRedirect("../principal.jsp");
          }

          if(
count>&& (session.getAttribute("id_nivel")).equals(3))
          {
            
response.sendRedirect("../principal3.jsp");
          }

          else
          {
            
response.sendRedirect("../error.jsp");
          }

        } 
Y como te repetia, asi si me funciona, pero te valida desde el mismo Servlet, yo necesito que haga validaciones en todas las JSP dentro del sistema, y es donde no recibo respuesta, seguramente estoy haciendo algo mal, gracias por la paciencia, pero no veo que pueda ser.......si escribo como String en la pagina JSP, como lo hago en el Servlet, quiza ese sea mi problema.
  #23 (permalink)  
Antiguo 20/05/2009, 15:07
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
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
  #24 (permalink)  
Antiguo 20/05/2009, 15:43
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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 !
  #25 (permalink)  
Antiguo 20/05/2009, 16:23
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Respuesta: ¿Como restringir a un pagina JSP segun el nivel de usuario?

Deberian funcionar los 2 sin problema.
__________________
se despide hasta la proxima
Gonzalo Castillo
  #26 (permalink)  
Antiguo 20/05/2009, 21:19
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
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:
<%
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("3"))  {
    
//El usuario no esta logeado, haces lo que corresponda...

response.sendRedirect("../error.jsp");
}
%> 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:57.