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

Iniciar sesion JSP + Servlets ¿Como se cierra?

Estas en el tema de Iniciar sesion JSP + Servlets ¿Como se cierra? en el foro de Java en Foros del Web. Hola, tengo un proyecto en NetBeans, con una pagina "index.jsp" donde se realiza la peticion a un servidor Tomcat de que ejecute un Servlet AutentificationServlet ...
  #1 (permalink)  
Antiguo 06/06/2007, 05:49
Avatar de utnubuk  
Fecha de Ingreso: junio-2007
Mensajes: 1
Antigüedad: 16 años, 10 meses
Puntos: 0
Iniciar sesion JSP + Servlets ¿Como se cierra?

Hola, tengo un proyecto en NetBeans, con una pagina "index.jsp" donde se realiza la peticion a un servidor Tomcat de que ejecute un Servlet AutentificationServlet que inicia sesión impidiendo el paso a usuarios no registrados. Eso está terminado y funciona. Voy a ponerlo por si alguien lo necesitara y para que se entienda lo que estoy haciendo.


Se ha implementado como Modelo + vista + controlador
modelo -> clase Fachada + clases del modelo del problema.
vista -> paginas .jsp + javascript + html.
controlador -> Servlets Java.


Este es el codigo de "index.jsp"

Código:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
...
...
<body>
...
<form method="post" action="AutentificationServlet">
	
	<input type="text" name="dni" size="15" maxlength="8"></p>
	<button name="entrar" style="width: 180px; height: 31px" type="submit">
	
...
</body>
Cuando se realiza la petición mediante la pulsación de alguno de los botones, y se hace el "submit" el servidor ejecuta action="AutentificationServlet", cuyo codigo es el siguiente:

Código:
public class AutentificationServlet extends HttpServlet {
  
    private String dni;
    Gestor gestor; //Clase fachada del modelo. 
   
 /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        nombre = new String();
        String url= "index.jsp";
        HttpSession sesion = request.getSession();
        sesion.setMaxInactiveInterval(-5);
        
        //variable que almacena los mensajes de error para devolverlos a la vista
        List errores=new ArrayList();
        
        //obtener parametros del request
        this.dni=(String)request.getParameter("dni");
        
        try{
            if((this.dni == null) || (this.dni.equals(""))){//numero minimo digitos dni
                errores.add("Debe incluir su dni para entrar");
            }
            else{                
                    Map parametros= request.getParameterMap();
                    if(parametros.containsKey("entrar")){
                        url = "interfaz.jsp"; //url de la interfaz a la que se quiere acceder
                        gestor.identificarProfesor(this.dni); //confirmacion de que el usuario esta registrado en el modelo
                    }               
            }//Fin else
            
            if(errores.isEmpty()){
                //añadir datos necesarios para el resto de lasesion
                sesion.setAttribute("dni", dni);
                
                request.setAttribute("dni", dni);
                RequestDispatcher view = request.getRequestDispatcher(url);
                view.forward(request, response);
            }
            else{
                //igual pero se le pasa el control a ErroresServlet con errores
                request.setAttribute("errores",errores);
                RequestDispatcher view = request.getRequestDispatcher("errores.jsp");
                view.forward(request, response);
            }
        }
        catch(RuntimeException e){//captura cualquier excepcion no esperada
            /*igual que antes se le pasa el control a ErroresServlet con e.getMessage()*/
            errores.add("Excepcion en tiempo de ejecucion (Autentication)\n" + e.getMessage());
            errores.add(e.getLocalizedMessage());
            request.setAttribute("errores", errores);
            RequestDispatcher view = request.getRequestDispatcher("errores.jsp");
            view.forward(request, response);
        }
        
    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
Ok, con esto, cuando el servidor ejecuta el HTTPServlet AutentificationServlet, devuelve en el responde el atributo "dni" y carga la pagina "interfaz.jsp" en la cual podrá recuperarse la información del response, es decir el "dni" para usarlo en otra operación del modelo.

--------------------------------------------------------------------------
Ahora mi pregunta es:

Cómo hago para que en "interfaz.jsp" haya una opción para cerrar la sesión y regrese a "index.jsp" impidiendo que una vez cerrada, usando los botones "Siguiente" y "Anterior" del navegador, teniendo en cuenta que los botones estan hechos con animación en javascript (con imágenes), y que el evento "onClick" ejecuta el servlet que se necesite. ¿Es necesario ejecutar un nuevo Servlet "Cerrar Sesión"?, ¿Y usando un enlace normal html?

NOTA: para el seguimiento de la sesion utilizo en las paginas jsp variables ocultas tipo:
Código:
<%  String dniP=(String)request.getAttribute("dni");
 %>

<input type=hidden name=dniP value= <%= dniP %> >
  #2 (permalink)  
Antiguo 06/06/2007, 06:59
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Iniciar sesion JSP + Servlets ¿Como se cierra?

Cita:
NOTA: para el seguimiento de la sesion utilizo en las paginas jsp variables ocultas tipo:
Eso no es que de mucha seguridad, ¿no sería mejor almacenar en la HttpSession una variable con el dni y asi no tener que pasarlo como parametro?. Los parametros ocultos de HTML no están ocultos para nadie que quiera acceder.

S!

Edit: Añadidos los interrogantes, que si no se lee raro

Última edición por GreenEyed; 06/06/2007 a las 12:01
  #3 (permalink)  
Antiguo 06/06/2007, 10:20
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: Iniciar sesion JSP + Servlets ¿Como se cierra?

Cita:
Iniciado por GreenEyed Ver Mensaje
Eso no es que de mucha seguridad, no sería mejor almacenar en la HttpSession una variable con el dni y asi no tener que pasarlo como parametro. Los parametros ocultos de HTML no están ocultos para nadie que quiera acceder.

S!

Pozi.
  #4 (permalink)  
Antiguo 06/06/2007, 11:08
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Iniciar sesion JSP + Servlets ¿Como se cierra?

En cuanto a la pregunta... pues seria con un if,no? osea preguntas si existe una session y ahi pones el codigo xhtml, JS,etc, else, pones un msg de que no esta autentificado.
Y pues el boton .. solo haces que redirija a una cierta pagina con response.sendRedirect(URL) o con JS... y lo de cerrar una session creo que es con session.close();
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 18:04.