2011-03-31 19 views
5

Estoy desarrollando un sistema para procesar transacciones financieras recibidas por los sistemas de comerciantes cliente & es un reemplazo del sistema existente que hemos comprado a un proveedor. La interfaz del cliente debe invocar las pantallas de procesamiento de transacciones de autenticación del usuario & de nuestro sistema.Manejo de sesión en la aplicación Java EE

La funcionalidad del sistema de la siguiente manera,

  1. recibir parámetros de entrada desde el sitio del comerciante
  2. validarlo
  3. Autenticar a los usuarios (usuarios están registrados en nuestro sistema & debemos invocar a nuestra pantalla de inicio de sesión)
  4. Transacción de proceso
  5. Respuesta de estado de devolución al comerciante

Una respuesta que se recibe El cliente debe validar los datos de la transacción de los valores que residen en la sesión.

Vista general del sistema se puede representar de la siguiente manera,

enter image description here

(click here for full size image)

Mi problema es el cliente no pudo retener la sesión una vez que estamos respondiendo al cliente. Pero la misma funcionalidad podría lograrse con el sistema que hemos comprado al proveedor (no tenemos el código fuente de esto para analizar la estructura interna de codificación). Espero que algo esté mal con la forma en que respondemos al cliente.

¿Cómo puedo solucionar este problema?

Estamos utilizando Java 1.4.2, servidor de aplicaciones Websphere

+0

Bonita imagen general. – BalusC

Respuesta

5

Hay muchas cosas que pueden hacer que una sesión desaparecen. Sugeriría rastrearlos y verificar si algo salió bien. Esto es más fácil de hacer si understand cómo funcionan las sesiones.

  • La sesión ha estado agotada. Esto generalmente tiene un valor predeterminado de 30 minutos. Esto es confiugureable por <session-timeout> en web.xml donde puede especificar el tiempo de espera en minutos. Puede implementar un HttpSessionListener para rastrear la creación de sesiones y destruir usando un registrador.

  • La sesión se ha invalidado por la fuerza. Esto sucede cuando el código llama al HttpSession#invalidate(). Esto también se puede rastrear con un HttpSessionListener.

  • La cookie de sesión ha desaparecido. Las sesiones están respaldadas por cookies. Si se crea una sesión, el servidor agregará un encabezado Set-Cookie con ID de sesión. El cliente debe enviar la misma cookie como encabezado Cookie en todas las solicitudes posteriores en la ruta (contextual) como se especifica en el encabezado Set-Cookie. Esto se puede rastrear en el monitor de tráfico HTTP (pestaña "Red") del conjunto de herramientas del desarrollador web incorporado del navegador (presione F12 en Chrome/Firefox23 +/IE9 +). Las cookies son accesibles para todas las aplicaciones web en el mismo dominio de cookies. Además, si ServletC2 se ejecuta en un contexto de aplicación web diferente al ServletC1, no utilizará la misma sesión.Además, si la aplicación web "servidor" se ejecuta en el mismo dominio, entonces, en teoría, puede eliminar todas las cookies de la aplicación web "cliente".

  • El cliente no admite cookies. Una aplicación web bien diseñada utiliza la reescritura de URL con jsessionid para rastrear clientes sin cookies entre solicitudes en la misma aplicación web. Pero la segunda aplicación weba tiene que hacer lo mismo cuando se redirige a la primera aplicación weba.

+0

Gracias por la explicación y me gusta la claridad de su respuesta. ¿Puede elaborar más sobre el 3er punto que ha descrito? ¿Hay alguna forma de obtener el sessionId de 'servletC1' en' servletS1' y 'Set-Cookie' con ese id en la respuesta de' servletS2'? – SLM

+0

¿No es una vulnerabilidad de seguridad reescribir las URL con 'jsessionid'? Expone la ID de sesión a un posible usuario no consciente. ¿Hay un mecanismo de seguridad adicional? – fnst

+1

@fnst: Es solo una vulnerabilidad si el usuario comparte la URL en público y el enlace ha sido utilizado por otros, siempre y cuando la sesión del usuario aún esté activa. No hay un mecanismo de seguridad adicional. Puede crear un "bloqueo de IP" usted mismo con la ayuda de un filtro de servlet o quizás un administrador de sesión personalizado. – BalusC

Cuestiones relacionadas