Saltar al contenido

¿Cómo redirigir a la página de inicio de sesión cuando la sesión ha expirado en la aplicación web de Java?

Después de de esta prolongada compilación de información dimos con la solución esta dificultad que pueden tener muchos usuarios. Te compartimos la respuesta y deseamos que sea de gran apoyo.

Solución:

Podrías usar un filtro y hacer la siguiente prueba:

HttpSession session = request.getSession(false);// don't create if it doesn't exist
if(session != null && !session.isNew()) 
    chain.doFilter(request, response);
 else 
    response.sendRedirect("/login.jsp");

El código anterior no está probado..

Sin embargo, esta no es la solución más extensa. También debe probar que algún objeto o indicador específico del dominio esté disponible en la sesión antes de asumir que debido a que una sesión no es nueva, el usuario debe haber iniciado sesión. ser paranoico!

¿Cómo redirigir a la página de inicio de sesión cuando la sesión ha expirado en la aplicación web de Java?

Esta es una pregunta incorrecta. Debe diferenciar entre los casos “El usuario no ha iniciado sesión” y “La sesión ha caducado”. Básicamente, desea redirigir a la página de inicio de sesión cuando el usuario no ha iniciado sesión. No cuando la sesión ha expirado. La respuesta actualmente aceptada solo verifica HttpSession#isNew(). Pero esto obviamente falla cuando el usuario ha enviado más de una solicitud en la misma sesión cuando el JSP crea implícitamente la sesión o lo que no. Por ejemplo, al presionar F5 en la página de inicio de sesión.

Como se dijo, en su lugar, debe verificar si el usuario ha iniciado sesión o no. Dado el hecho de que está haciendo este tipo de pregunta, mientras que los marcos de autenticación estándar como j_security_checkShiro, Spring Security, etc. ya administran esto de manera transparente (y, por lo tanto, no habría necesidad de hacerles este tipo de preguntas), eso solo puede significar que está utilizando un enfoque de autenticación de cosecha propia.

Suponiendo que está almacenando el usuario que inició sesión en la sesión en algún servlet de inicio de sesión como el siguiente:

@WebServlet("/login")
public class LoginServlet extends HttpServlet 

    @EJB
    private UserService userService;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
    

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User user = userService.find(username, password);

        if (user != null) 
            request.getSession().setAttribute("user", user);
            response.sendRedirect(request.getContextPath() + "/home");
         else 
            request.setAttribute("error", "Unknown login, try again");
            doGet(request, response);
        
    


Luego puede verificar eso en un filtro de inicio de sesión como a continuación:

@WebFilter("/*")
public class LoginFilter implements Filter 

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException 

    // ...

No hay necesidad de jugar con frágil HttpSession#isNew() cheques

también puedes hacerlo con un filtro como este:

public class RedirectFilter implements Filter 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
    HttpServletRequest req=(HttpServletRequest)request;

    //check if "role" attribute is null
    if(req.getSession().getAttribute("role")==null) 
        //forward request to login.jsp
        req.getRequestDispatcher("/login.jsp").forward(request, response);
     else 
        chain.doFilter(request, response);
    


Calificaciones y reseñas

Agradecemos que quieras respaldar nuestro ensayo ejecutando un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *