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_check
Shiro, 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.