En este ejercicio vamos a modificar el EJB savingsaccount para incorporar un control de acceso. En resumen, vamos a definir dos roles, Administrador y ReadOnly y vamos a probar la aplicación cliente
Lanza el servidor de ejemplos creado en un ejercicio anterior. Comprueba si
se encuentra desplegado el EJB savingsaccount-ejb.jar
. En el caso
en que se encontrara, bórralo. Descarga el fichero ejemplo8.zip
y descomprímelo en el directorio de trabajo. Vamos a trabajar con ese
EJB. Debes desplegarlo y probar la aplicación cliente que se encuentra
en el directorio src. Para ello hay que crear la tabla en la base de datos (el
script se encuentra en el directorio sql), desplegar el bean, compilar la aplicación
cliente y probarla.
Recordamos la forma de ejecutar el script savingsaccount.sql
:
% cd sql % $WL_HOME/weblogic700/samples/server/eval/pointbase/tools/startPointBaseCommander.sh Do you wish to create a "New/Overwrite" Database? [default: N]: Select product to connect with: Embedded (E), or Server (S)? [default: E]: S Please enter the driver to use: [default: [com.pointbase.jdbc.jdbcUniversalDriver]: Please enter the database URL to use: [default: [jdbc:pointbase:server://localhost/sample]: jdbc:pointbase:server://localhost/demo Username: [default: PBPUBLIC]: examples Password: [default: PBPUBLIC]: examples PointBase Commander 4.2ECF build 183 SERVER Interactive SQL command language. Mac OS X/10.1.5(C) Copyright 1998 - 2002 PointBase(R), Inc. All rights reserved SQL> run "savingsaccount.sql";
1. Abre la consola de administración. Pincha la opción Realms
y después pincha en myreal. Aparecerá una pantalla de entrada
de datos. Selecciona la pestaña superior Contents y, en la nueva pantalla
que aparece, pincha el elnlace Manage Users within this Realm. En la
nueva pantalla, pincha en Configure a new user.... Allí tendrás
que definir el nombre y contraseña del nuevo usuario. Pon admin
como usuario y weblogic
como contraseña. Si escoges
otra contraseña, debe tener 8 o más caracteres. Pulsa Apply.
2. Pincha en la pestaña Groups, selecciona el grupo Administrators
y pulsa la flecha. De esta forma añadimos el usuario admin
al grupo Administrators
.
3. Crea ahora el usuario operador
. Asígnalo al grupo Operators
.
1. Desempaqueta el EJB JAR
% jar xvf savingsaccount-ejb.jar
2. Modifica el fichero META-INF/ejb-jar.xml para incorporar el control de acceso al EJB. Para ello borra las siguientes líneas
<method-permission> <unchecked /> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>*</method-name> </method> </method-permission>
y sustitúyelas por estas otras
<security-role> <role-name>Administrador</role-name> </security-role> <security-role> <role-name>ReadOnly</role-name> </security-role> <method-permission> <role-name>Administrador</role-name> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>*</method-name> </method> </method-permission> <method-permission> <role-name>ReadOnly</role-name> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>getFirstName</method-name> </method> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>getLastName</method-name> </method> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>findByPrimaryKey</method-name> </method> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>getBalance</method-name> </method> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>findByLastName</method-name> </method> <method> <ejb-name>SavingsAccountEJB</ejb-name> <method-name>findInRange</method-name> </method> </method-permission>
3. Por último, debes hacer corresponder los roles con los usuarios
antes creados. Para ello debes añadir las siguientes líneas al
final del fichero META-INF/weblogic-ejb-jar.xml
, justo antes del
elemento </weblogic-ejb-jar>
<security-role-assignment> <role-name>Administrador</role-name> <principal-name>admin</principal-name> </security-role-assignment> <security-role-assignment> <role-name>ReadOnly</role-name> <principal-name>operador</principal-name> </security-role-assignment>
4. Construye de nuevo el bean
% jar cvf savingsaccount-ejb.jar *.class META-INF/*
y vuelve a desplegarlo usando la consola del servidor de aplicaciones.
5. Una vez desplegado el bean, prueba la aplicación cliente. Deberá arrojar un error producido porque no se tiene suficientes privilegios para trabajar con el bean.
Intentando encontrar la cuenta con identificador: i0 Caught an exception. java.rmi.AccessException: Security Violation: User: '<anonymous>' has insufficient permission to access EJB: type=<ejb>, application=savingsaccount-ejb, module=savingsaccount-ejb, ejb=SavingsAccountEJB, method=findByPrimaryKey, methodInterface=Home, signature={java.lang.String}.
6. Para autentificarte, introduce el siguiente código en la aplicación cliente:
public static Context getInitialContext() throws javax.naming.NamingException { Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); p.put(Context.SECURITY_PRINCIPAL, "admin"); p.put(Context.SECURITY_CREDENTIALS, "weblogic"); p.put(Context.PROVIDER_URL, "t3://localhost:7001"); return new javax.naming.InitialContext(p); } }
7. Prueba a autientificarte como usuario operador
. Verás
que se obtiene el siguiente error en el control de acceso.
Intentando encontrar la cuenta con identificador: i0 ... Intentando encontrar la cuenta con identificador: i16 Intentando encontrar la cuenta con identificador: i17 Intentando encontrar la cuenta con identificador: i18 Intentando encontrar la cuenta con identificador: i19 Caught an exception. java.rmi.AccessException: Security Violation: User: 'operador' has insufficient permission to access EJB: type=, application=savingsaccount-ejb, module=savingsaccount-ejb, ejb=SavingsAccountEJB, method=getId, methodInterface=Remote, signature={}
8. Modifica por último el descriptor de despliegue para que el rol
ReadOnly
pueda acceder al método getId
. Despliega
otra vez el bean y vuelve a probar la aplicación cliente. Comprueba qué
sucede.