Ejemplo: código de aplicación de enterprise bean
El siguiente ejemplo de componente EJB (Enterprise JavaBeans) ilustra el uso de los métodos isCallerInRole y getCallerPrincipal en un módulo EJB.
Se recomienda utilizar la seguridad declarativa. El siguiente ejemplo representa un modo de utilizar los métodos isCallerInRole y getCallerPrincipal. La aplicación puede utilizar estos resultados del modo que resulte más adecuado.
Interfaz remota
File : Hello.java
package tests;
import java.rmi.RemoteException;
/**
* Interfaz remota para Enterprise Bean: Hello
*/
public interface Hello extends javax.ejb.EJBObject {
public abstract String getMessage()throws RemoteException;
public abstract void setMessage(String s)throws RemoteException;
}
Interfaz de factoría
File : HelloHome.java
package tests;
/**
* Interfaz de factoría para Enterprise Bean: Hello
*/
public interface HelloHome extends javax.ejb.EJBHome {
/**
* Crea una instancia predeterminada de Session Bean: Hello
*/
public tests.Hello create() throws javax.ejb.CreateException,
java.rmi.RemoteException;
}
Implementación del bean
File : HelloBean.java
package tests;
/**
* Clase de implementación de bean para Enterprise Bean: Hello
*/
public class HelloBean implements javax.ejb.SessionBean {
private javax.ejb.SessionContext mySessionCtx;
/**
* getSessionContext
*/
public javax.ejb.SessionContext getSessionContext() {
return mySessionCtx;
}
/**
* setSessionContext
*/
public void setSessionContext(javax.ejb.SessionContext ctx) {
mySessionCtx = ctx;
}
/**
* ejbActivate
*/
public void ejbActivate() {
}
/**
* ejbCreate
*/
public void ejbCreate() throws javax.ejb.CreateException {
}
/**
* ejbPassivate
*/
public void ejbPassivate() {
}
/**
* ejbRemove
*/
public void ejbRemove() {
}
public java.lang.String message;
//métodos de empresa
// todos los usuarios pueden llamar a getMessage()
public String getMessage() {
return message;
}
// todos los usuarios pueden llamar a setMessage() pero sólo unos pocos usuarios pueden establecer un nuevo mensaje.
public void setMessage(String s) {
// obtener el emisor del bean utilizando getCallerPrincipal()
java.security.Principal principal = mySessionCtx.getCallerPrincipal();
.lang.String callerId= principal.getName();
// comprobar si el emisor del bean tiene el rol Mgr
boolean isMgr = mySessionCtx.isCallerInRole("Mgr");
// establecer sólo el mensaje proporcionado si el emisor es "bob" o si tiene el rol Mgr
if ( isMgr || callerId.equals("bob") )
message = s;
else
message = "Hello";
}
}
Después de desarrollar el bean de entidad, cree una referencia de rol de seguridad
en el descriptor de despliegue bajo el bean de sesión, Hello:
<security-role-ref>
<description>Sólo los gestores pueden llamar a setMessage() en este bean (Hello)</description>
<role-name>Mgr</role-name>
</security-role-ref>
Para obtener información sobre cómo crear un elemento <security-role-ref>, consulte Protección de aplicaciones de enterprise bean. Utilice la información contenido en Correlacionar security-role-ref y role-name a role-link para crear el elemento.