Problema con las sesiones en struts-spring
"phaseolusv" <[email protected]>
| Newsgroups | gmane.comp.java.javaspain |
|---|---|
| Message-ID | <[email protected]> |
Hola. Espero que alguien pueda ayudarme.
Estoy enfrascado en un problema que no he logrado resolver respecto
del manejo de sesiones en una aplicacion que he desarrollado.
Entorno: weblogic 9.2, jdk 1.4_12, spring + struts + hibernate +
xfire.
El problema es el siguiente: Cuando un usuario se logea en el sitio,
se recuperan de la BD los datos del usuario, y las opciones del menú
que le corresponden. Estos datos los almaceno en una nueva sesion.
//*** inicio metodo de login() de usuario (LoginAction) ***
//cerrar explicitamente la sesion de usuario
HttpSession session = request.getSession();
session.invalidate();
// ...recuperacion de datos desde BD...
// ...
//Abrir nueva sesion
HttpSession nuevaSesion = request.getSession();
nuevaSesion = request.getSession(true);
// Implementar rescate de perfiles y roles
nuevaSesion.setAttribute("nombreUsr", nombreUsr);
nuevaSesion.setAttribute("loginUsr", login);
nuevaSesion.setAttribute("liMenu", liMenu);
//*** fin login ***
Luego desde la jsp recupero los datos de la sesion e imprimo el menú
y la identificación del usuario.
... welcome.jsp ...
< tr >
< td width="67%" valign="top" class="titulo3"
>Bienvenido: < br >
< % HttpSession userSesion =
request.getSession(false); % >
<b>< % = userSesion.getAttribute("nombreUsr") %
>< / b >
< / td >
< / tr >
....
... menu.jsp ...
< % String nombreContexto = request.getContextPath(); % >
< % HttpSession userSesion = request.getSession(false); % >
< % List liMenu = (List) userSesion.getAttribute("liMenu"); %
>
< % for ( int i = 0; i < liMenu.size(); i ++){ % >
< % String[] sOpcion = (String[]) liMenu.get
(i); % >
< % if (sOpcion[2]== null){ % >
makeMenu('< % = sOpcion[0] % >','< %
= sOpcion[1] % >')
< % }
else { % >
makeMenu('< % = sOpcion[0] % >','< %
= sOpcion[1] % >', '< % = sOpcion[2]% >', '< % = sOpcion[3] % >')
< % }
} % >
... fin menu ....
Hasta aquí no debería haber problema para que todo funcione OK, el
problema es que, en computadores distintos, con browsers distintos
(obvio), casi siempre al usuario que se loguea, le muestra los datos
del usuario que se logeo anteriormente, es como si quedara sucia la
jsp, ya que al hacer refresh del browser muestra los datos correctos.
No es caché de browser, ya que son usuarios distintos en computadores
distintos.
Al imprimir en el log los datos devueltos de la base de datos, veo
que son los que corresponden, es decir, los del usuario actual, pero
se imprimen en la web los del usuario anterior.
Qué puedo estar haciendo mal ??
Cómo hago para que la jsp me considere los datos de la sesion que
corresponde??
Cómo es posible que se estén confundiendo las sesiones??
Los bean spring que corresponden a los Action de Struts
(org.springframework.web.struts.DelegatingActionProxy) los puse ahora
como singleton=false, antes los tenía por defecto, pero el problema
persiste.
Espero alguien me pueda ayudar, no veo cómo arreglarlo.
Gracias.