La forma básica en que entiendo que el SecurityUtils.getSubject()
de Shiro funciona es que devuelve el asunto que está vinculado al subproceso que se está ejecutando actualmente. Sin embargo, esto parece estar en desacuerdo con un contenedor de servlets como Tomcat que está utilizando un grupo de subprocesos para atender las solicitudes.Shiro en un entorno de subprocesos múltiples
Si se dice que Tomcat usa ThreadA para manejar solicitudes, cualquier llamada a SecurityUtils.getSubject()
debería funcionar bien. Pero, tan pronto como se selecciona ThreadB, el usuario se pierde, getSubject
devuelve null y isAhenthenticated ahora es falso. Esto es aunque el usuario todavía está conectado.
He confirmado esto en mi aplicación. Estoy usando Shiro Core 1.2 y noto que mi usuario está autenticándose milagrosamente cuando navego por mi aplicación. Si miro los registros, el problema ocurre tan pronto como se usa un hilo diferente para atender la solicitud.
Entonces, ¿tengo Shiro configurado incorrectamente? Parece que el 'usuario actual' debe estar vinculado a algo un poco más duradero que el hilo actual. Esperaría que sea basado en la sesión. Sé que Shiro tiene administración de sesiones, pero en todos los ejemplos que he encontrado, dice que para obtener al usuario actual llame al getSubject
, que mira el ThreadContext. ¿Me estoy perdiendo de algo?
Gracias por informar de nuevo con esta respuesta bien escrita sma! –
Tengo alguna pregunta sobre 'SecurityUtils.getSubject()'. Dado que hay un grupo de subprocesos en contenedor Tomcat, ¿un subproceso puede estar vinculado a multiláminas? – znlyj