java authentication redirect struts2 actionresult

java - Struts 2: redirigir a una acción correcta después del interceptor de autenticación



authentication redirect (2)

Al final pude hacerlo funcionar. Básicamente, lo que extrañé de la solución propuesta por Roman C. era que necesitaba tener guardada una variable de clase (así que no solo la tenía en la sesión).

private String savedUrl;

public String getSavedUrl(){ return savedUrl; }

Eso hizo el truco.

Gracias

No pude encontrar nada en línea, así que lo preguntaré aquí. Estoy usando strut2 y tengo un paquete privado de acciones, porque ciertas acciones requieren el inicio de sesión para tener acceso. Así que tengo esto en mi paquete seguro:

<interceptors> <interceptor name="authenticationInterceptor" class="com.koorde.interceptor.AuthenticationInterceptor"/> <interceptor-stack name="secureStack"> <interceptor-ref name="authenticationInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="secureStack"/> <global-results> <result name="login" type="redirect">dologin</result> <result name="session_error" type="redirect"> html/error/hibernate_session.jsp</result> <result name="error" type="redirect"> html/error/hibernate_session.jsp</result> </global-results>

Y, por supuesto, la definición de otras acciones.

Mi problema es el siguiente:

Digamos que un usuario quiere acceder a su área personal. Hace clic en personalArea enlace personalArea y será redireccionado automáticamente en la página de inicio de sesión (porque personalArea es una acción segura). Lo que quiero es: después de iniciar sesión, el usuario se redirige automáticamente (para continuar la acción) a personalArea y no a la página de inicio.

Entonces, lo que quiero es: cuando el usuario inicia sesión en el sistema debido a acciones seguras, después de iniciar sesión, la ejecución de la acción (asegurada) continúa.

¿Cómo puedo hacer eso?


Una de las soluciones posibles es realizar un seguimiento del usuario que intercepta sus URL. Puede hacerlo en el interceptor de autenticación.

String queryString = request.getQueryString(); session.put("savedUrl", request.getRequestURI()+(queryString==null?"":("?"+queryString)));

usa el resultado global con un parámetro dinámico

@Results({ @Result(name = "return", type = "redirect", location = "${savedUrl}") })

después de iniciar sesión, compruebe la sesión para savedUrl y devuelva el resultado "return" . Se supone que proporciona getter para el parámetro dinámico.