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

Problema con sessiones, filtros, struts...

Estas en el tema de Problema con sessiones, filtros, struts... en el foro de Java en Foros del Web. Buenas, Mi pregunta es sobre sessiones, tengo un filtro hecho para controlar si existe una variable de sesion y sino enviar a una pagina de ...
  #1 (permalink)  
Antiguo 08/11/2007, 11:43
 
Fecha de Ingreso: noviembre-2007
Mensajes: 24
Antigüedad: 16 años, 5 meses
Puntos: 0
Problema con sessiones, filtros, struts...

Buenas,

Mi pregunta es sobre sessiones, tengo un filtro hecho para controlar si existe una variable de sesion y sino enviar a una pagina de error, el caso es que entro la primera vez a la pagina filtrada y me funciona, me envia a la de error, tras esto ejecuto un action y creo la session y voy a la pagina filtrada y todo correcto, hasta aqui normal, el problema es el siguiente. Desde esta pagina filtrada ejecuto un action y destruyo la session y entonces al volver a la misma pagina no me ejecuta el filtro y se me carga sin problema cuando no deberia ser asi.

EL FILTRO
=======
public void doFilter (ServletRequest request,
ServletResponse response,
FilterChain chain)
{

HttpSession session;
if (request instanceof HttpServletRequest){
session = ((HttpServletRequest)request).getSession();
try{
if (session.getAttribute("Usuario") != null){
chain.doFilter(request, response);
}else{
((HttpServletResponse)response).sendRedirect(((Htt pServletRequest)request).getContextPath() + "/Welcome.do");
}
}catch (IOException io){
System.out.println("IOException raised");
}
catch (ServletException se){
System.out.println("ServletException raised");
}
}
}


Struts-config
=========
<global-forwards>
<forward name="welcome" path="/Welcome.do"/>
</global-forwards>

<action-mappings>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
<action path="/abrir" type="com.jash.Login" scope="session">
<forward name="index" path="/index.jsp"/>
</action>
<action path="/cerrar" type="com.jash.LoginOut">
<forward name="index" path="/index.jsp"/>
</action>
</action-mappings>

action login
=======
public ActionForward execute (ActionMapping mappings, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession(true);
session.setAttribute("Usuario","jacinto");
return mappings.findForward("index");
}//Fin

action login out
===========
public ActionForward execute (ActionMapping mappings, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession(true);
session.removeAttribute("Usuario");
session.invalidate();
return mappings.findForward("index");
}//Fin

web.xml
=====
<filter>
<filter-name>prueba</filter-name>
<filter-class>com.jash.filters.FilterPrueba</filter-class>
</filter>
<filter-mapping>
<filter-name>prueba</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>

Creo que eso es todo, si me podeis hechar una mano o enviar un ejemplo, manual en castellano, idea, cualquier cosa, para leer y tirar para adelante.

Otro problema o algo que no entiendo es que al crear el struts-config.xml, configuro unos action con unos forward, y cuando ejecuto el action en vez de irse a la pagina que le pongo en el forward, lo que hace es como un include... no se si es normal o no.

Gracias de antemano por tu ayuda, un saludo!

Jash.
  #2 (permalink)  
Antiguo 08/11/2007, 12:17
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Problema con sessiones, filtros, struts...

No me acaba de quedar claro el camino ya que "ejecuto", "voy", "vuelvo" etc. no son lo suficientemente precisos (no es lo mismo una petición nueva, que un redirect, que un forward, que un include..) asi que no lo puedo asegurar, pero me da que tu problema es que el filtro no se te esta aplicando al hacer un forward a una pagina.

Es decir, se te aplica la primera vez pero no antes de ejecutar donde va el forward, y eso es normal. Si usas un contenedor de servlets que implemente el JSKD 2.3 o menos, no hay solucion directa ya que los filtros simplemente NO se aplican entre includes y forwards. Si usas un contenedor con JSKD2.4, entonces tienes que configurar el filtro (en el web.xml) para que se aplique tambien a los forwards. Ahora mismo no lo recuerdo de cabeza pero la documentacion del JSDK lo explica.

Eso si, ojo no crees bucles infinitos entre el filtro y los forward (filtro envia a una pagina que hace un forward a otra donde se aplica el filtro... y vuelta a empezar)

S!
  #3 (permalink)  
Antiguo 09/11/2007, 02:55
 
Fecha de Ingreso: noviembre-2007
Mensajes: 24
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Problema con sessiones, filtros, struts...

Buenos dias,

Lo primero gracias por responder y siento no haber podido ser mas claro en mi explicación, en principio lo que intento es hacer una zona de acceso seguro, autentificado con sessiones.

Como imagino que habras podido comprobar soy bastante novato en esto de java y la web, y no encuentro información concreta sobre lo que necesito, quiza puedas recomendarme mejor alguna web donde allá pequeños manuales o ejemplos.

Cuando dices que debo configurar el filtro (en el web.xml) para que se aplique tambien a los forwards, que debo añadir a mi web.xml, esto es lo que tengo ahora.

web.xml
=====
<filter>
<filter-name>prueba</filter-name>
<filter-class>com.jash.filters.FilterPrueba</filter-class>
</filter>
<filter-mapping>
<filter-name>prueba</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>


Tambien me comentas que no es lo mismo un redirect, que un forward, que un include... pero mi duda es: ¿Se puede especificar en los action de struts otra cosa que no sean forward? Ves mi struts-config.xml y solo tengo forwards...

Struts-config
=========
<global-forwards>
<forward name="welcome" path="/Welcome.do"/>
</global-forwards>

<action-mappings>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
<action path="/abrir" type="com.jash.Login" scope="session">
<forward name="index" path="/index.jsp"/>
</action>
<action path="/cerrar" type="com.jash.LoginOut">
<forward name="index" path="/index.jsp"/>
</action>
</action-mappings>


Y claro en mis Action despues tengo:
return mappings.findForward("index");


Bueno espero haberme explicado mejor ahora, sino haber si conoces algun ejemplo que este por ahi que haga esto del acceso restringido con sessiones y struts.

Gracias de antemano por tu ayuda y tu paciencia con mis explicaciones.

Un saludo.

Jash.
  #4 (permalink)  
Antiguo 09/11/2007, 04:54
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Problema con sessiones, filtros, struts...

En cuanto a Struts y restringir acceso no te puedo ayudar puesto que no lo uso y no se como va internamente, lo siento.

Lo que queria decir que no queda claro es el "trafico" que intentas explicar. Es decir, accedes a una pagina desde el navegador, pasa por un filtro y y si no esta autentificado le haces una redireccion (sendRedirect) a otra pagina. Esta segunda peticion no pasa por el filtro y llega a una accion de Struts que hace un forward a una JSP... o algo así, no? Y el problema es que no te pasa el filtro entre la accion de Struts y la JSP a la que haces el forward?

Es importante especificar si haces un redirect o un forward y donde quieres que se ejecute el filtro, ya que segun donde quieras que se haga, tendras que configurarlo de una forma u otra. Así que si no es exactamente como lo he dicho, escribe el camino explicando cada paso si es forward o redirect y veremos donde esta la cuestion.

Por ultimo, para aplicar los filtros entre peticiones internas, tienes que usar un atributo en el filter-mapping en el fichero web.xml, algo asi como:

Cita:
<filter-mapping>
<filter-name>prueba</filter-name>
<url-pattern>/index.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Pero repito, solo funciona con servlet containers con implementen JSDK2.4 (Tomcat 5.x, Resin 3.x ...)

S!
  #5 (permalink)  
Antiguo 12/11/2007, 06:57
 
Fecha de Ingreso: noviembre-2007
Mensajes: 24
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Problema con sessiones, filtros, struts...

Perfecto, muchas gracias, era cuestion del dispacher...

Una cuestión más, cuando hago por ejemplo un link a "Abrir.do", en el struts-config.xml tengo el mapeo por ejemplo asi:

==========================
<action path="/Abrir" type="com.jash.prueba.Login" scope="session">
<forward name="index" path="/index.jsp"/>
</action>
=============

Mi pregunta es, ¿Despues de ejecutar el action Login, en vez de irse a la pagina index.jsp, se queda en abrir.do y hace una especie de include del index.jsp pero la url sigue siendo abrir.do y no index.jsp, ese funcionamiento es normal o se puede hacer algo?

Muchas gracias por tu ayuda!!

Jash.
  #6 (permalink)  
Antiguo 12/11/2007, 07:09
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Problema con sessiones, filtros, struts...

Ese es exactamente el comportamiento de un forward: Redirigir internamente en el servidor sin que el navegador se entere (cambie la URL).

Así que es normal.

Lo otro es un "redirect", que es redirigir al navegador para que haga otra peticion externa cambiando su URL y volviendo a hacer una peticion nueva. No me preguntes como hacerlo en Struts pues no uso Struts .

S!
  #7 (permalink)  
Antiguo 15/02/2008, 02:59
 
Fecha de Ingreso: febrero-2008
Mensajes: 1
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Problema con sessiones, filtros, struts...

Buenas:

Para indicar con Struts que quieres una redireccion y no un forward debes incluir un parametro mas a tu <forward> del Struts-config.xml.

Quedando por ejemplo asi:

<forward name="toInicio" path="/index.jsp" redirect="true" />


Un saludo,
Victor
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 04:03.