2011-07-18 8 views
17

Estoy trabajando con glassfish y el módulo jaas.Glassfish 3.1 principal predeterminado para la asignación de roles

que configuran mi web.xml de esta manera.

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>ALL Page for admin</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>user</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>file</realm-name> 
</login-config> 
<security-role> 
    <description>Administrator</description> 
    <role-name>user</role-name> 
</security-role> 

Significa que todos los usuarios que desean acceder a mi aplicación web deben pertenecer al grupo de usuarios.

A continuación, en la consola glassfish tengo que marcar las opciones en: Configuración -> server-config -> Seguridad -> Por defecto Principal Para orientación de puesto

Mi pregunta es ¿por qué tengo que marque esta principal defecto de Role Mapping? ¿Y cómo puedo cambiar mi web.xml para evitar marcarlo?

Muchas gracias

Loic

Respuesta

37

Al especificar las funciones y papeles en web.xml que está utilizando la seguridad declarativa, que se basa esencialmente en el uso de JAAS para hacer cumplir los requisitos de autorización y autenticación especificados de forma declarativa.

Las funciones especificadas en los descriptores de despliegue son meramente representaciones de las funciones que se utilizan en la aplicación. Estos roles no necesitan ser los mismos que los presentes en la base de datos de identidad de usuario (o dominio de autenticación) utilizada en tiempo de ejecución, y generalmente pueden ser diferentes, ya que el desarrollo de la aplicación puede haberse realizado sin tener en cuenta a los usuarios reales y grupos presentes en la base de datos de identidad del usuario.

Normalmente, se realiza una asignación entre los roles declarativos especificados en web.xml y los principales o grupos presentes en la base de datos de identidad de usuario utilizando los descriptores de despliegue específicos del contenedor. En Glassfish 3,1, este es el archivo glassfish-web.xml. Cada uno de tales mapeo sería asignar un papel declarativa en la aplicación, ya sea a un director o un grupo en un reino JAAS, de la siguiente manera, ya sea en glassfish-web.xml (para archivo WAR despliegues) o glassfish-application.xml (para los despliegues de archivos EAR), o glassfish-ejb-jar.xml (por despliegues de archivos JAR EJB):

glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-web-app> 

glassfish-aplicacion.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd"> 
<glassfish-application> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-application> 

glassfish-ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd"> 
<glassfish-ejb-jar> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-ejb-jar> 

Los descriptores antes mencionados asigne una función user a un principal con la identidad individual del nombre Root y para un grupo de usuarios con nombre Administrators en el reino. Puede omitir cualquiera de estas asignaciones y retener solo un rol de asignación de principal o un mapeo de rol a grupo. También puede tener varios principales asignados al mismo rol, o múltiples grupos asignados al mismo rol, o incluso múltiples principales y grupos asignados al mismo rol.

Es importante entender el concepto de directores y grupos en los dominios JAAS: un principal representa la identidad de un Sujeto (el usuario que inicia sesión en la aplicación) en el sistema, y ​​podría ser una identidad individual (un solo usuario) o una identidad de grupo (un grupo de usuarios). Al correlacionar las funciones declarativas con los principales o grupos reales, se podrían aplicar las reglas especificadas en el web.xml frente a cualquier base de datos de identidad del usuario (es decir, cualquier dominio), y poder hacerlo de forma dinámica sin ningún cambio en la base del código; después de todo, tal cambio requeriría volver a mapear las funciones declarativas para el nuevo conjunto de principios y grupos, en un ámbito posiblemente diferente. Puede encontrar un tutorial básico sobre cómo la seguridad de Java EE y JAAS funcionan juntos en the chapter on security in the Java EE 6 tutorial.

Glassfish permite un esquema de mapeo simplificado, donde no es necesario realizar la asignación para todas las funciones declarativas en el descriptor de despliegue específico del contenedor (en este caso glassfish-web.xml), siempre y cuando los nombres de la los roles declarativos son similares a los nombres de los principales o grupos. Este es el esquema principal de asignación de roles al principal. Parece que en su caso, los principales/grupos en su dominio son los mismos que los roles declarativos especificados en web.xml, y por lo tanto evitará mapear las funciones a los principales y grupos de forma explícita. En palabras más simples, si el rol user es el mismo que el principal user o un grupo de usuarios user en su dominio JAAS (y de manera similar para otras identidades), puede usar el rol predeterminado para el esquema principal de mapeo de Glassfish, sin asignar esto para cada función en su archivo web.xml.

Si desea evitar marcar la opción de implementación de principal predeterminado a asignación de roles, debe proporcionar la función a la asignación de principal/grupo usted mismo en los descriptores de despliegue específicos del contenedor, como lo haría normalmente para otros servidores de aplicaciones.

Puede leer más sobre este tema en one of the posts on blogs.oracle.com that describes this feature of Glassfish.

+0

Gracias por la respuesta. En realidad, lo que quiero hacer es tener un grupo llamado usuario. Y todos los usuarios son parte de este grupo. Significa que todos los que tienen una cuenta de mi aplicación (es una guerra) pueden conectarse utilizando una contraseña y un usuario. Luego, después de que me las arregle solo, puedo acceder a lo que aparece en la aplicación. – user789148

+0

Si uso el código que me da para glassfish-web.xml. Recibo el siguiente error al intentar conectar con mi aplicación. Se ha prohibido el acceso al recurso especificado (se ha denegado el acceso al recurso solicitado). Ni siquiera me da la pantalla de inicio de sesión – user789148

+0

Lo siento. Ok, lo entiendo ahora. Solo necesito agregar el mapeo de mis usuarios y funciona :) Muchas gracias Rock – user789148

Cuestiones relacionadas