Pregunta

Quiero tener acceso al modelo completo de los usuarios con sus papeles en mi aplicación SOAP. Por ejemplo, podría querer saber el papel de un usuario llamado "Fred".

¿Cómo llego en una especie de registro global JAAS y hago (pseudocódigo) globalRegistry.getUser ( "Fred"). GetPrincipals () ? (Tenga en cuenta que en JAAS, un papel es representado por un Principal .)

saber cómo conseguir el Principal del Asunto del LoginContext , pero que tiene dos problemas.

  1. Es sólo en el momento de inicio de sesión, y yo preferiría no codificar el registro antes mencionado y almacenar el Asunto y Principal Objetos mí mismo, puesto que ya están almacenada por el servidor de aplicaciones.
  2. Preferiblemente, quiero ser capaz de acceder a esta información, incluso cuando Fred no es el usuario actual.

Estoy utilizando el embarcadero, pero supongo que estos comportamientos son estándar para JAAS.

¿Fue útil?

Solución

Utilizamos una variable ThreadLocal para hacer referencia al usuario actual como se ha autenticado en el punto de entrada del sistema (un servlet o EJB en nuestro caso). Esto permite el acceso 'global' para el usuario actual. Esto no está directamente relacionado con JAAS o cualquier otro protocolo de seguridad, pero se puede inicializar de ellos.

EDIT:. El regreso de la ThreadLocal es el Sujeto para el usuario actual

Acceso a otros usuarios normalmente se llevaría a cabo a través de algún tipo de módulo de administración.

Otros consejos

Un modelo que he visto es:

AccessControlContext acc = AccessController.getContext();
Subject subject = Subject.getSubject(acc);
Set<Principal> principals = subject.getPrincipals();

En esencia, esto encuentra el tema actualmente asociados con el hilo actual, y le pregunta por sus directores.

Un ejemplo de la utilización de este está en Apache Jackrabbit 's RepositoryImpl . Está en el método extendAuthentication, cuyo trabajo es determinar qué derechos Jackrabbit el subproceso actual tiene al crear una nueva sesión (creo).

Sin embargo, debo señalar que esto no necesariamente puede realmente funcionar, al menos en contextos J2EE. Estoy usando este código bajo JBoss AS7, y no encuentra un sujeto. Eso podría ser un error, sin embargo.

Para mí, parece appsever esta Mizes de usuarios, grupos, etc., con las funciones de aplicación J2EE.

  • Obtención de permisos de un usuario certaion es una tarea de administración y por lo general tiene que llevarse a cabo utilizando las API-servidor de aplicaciones específico.
  • JAAS modelo de programación trabaja en un mayor nivel de abstratcion. Sólo se proporciona la información de si un usuario está en un papel J2EE (definida dentro de la aplicación)

Creo que JAAS fue diseñado para permitir que realmente no lo que está tratando de hacer. Sé que en las aplicaciones que he construido que necesitaba ese tipo de funcionalidad que tenía que esquivar JAAS y el programa directamente a cualquiera que sea el repositorio de la identidad real fue, ya sea LDAP, ActiveDirectory o lo que sea.

En un uso EJB

@Resource(mappedName = "java:comp/EJBContext")
protected SessionContext sessionContext;

Y tratar con context.lookup("java:comp/EJBContext") en cualquier punto.


Este código es para familia de servidores JBoss, para otros se ven en su JNDI para encontrarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top