Beispiel: Code einer Enterprise-Bean-Anwendung
Das folgende EJB-Komponentenbeispiel (Enterprise JavaBeans) veranschaulicht die Verwendung der Methoden "isCallerInRole" und "getCallerPrincipal" in einem EJB-Modul.
Die Verwendung der deklarativen Sicherheit wird empfohlen. Das folgende Beispiel zeigt nur eine Möglichkeit für die Verwendung der Methoden isCallerInRole und getCallerPrincipal. Die Anwendung kann das Ergebnis auf jede gewünschte Weise verwenden.
Ferne Schnittstelle
File : Hello.java
package tests;
import java.rmi.RemoteException;
/**
* Ferne Schnittstelle für die Enterprise-Bean: Hello
*/
public interface Hello extends javax.ejb.EJBObject {
public abstract String getMessage()throws RemoteException;
public abstract void setMessage(String s)throws RemoteException;
}
Home-Schnittstelle
File : HelloHome.java
package tests;
/**
* Home-Schnittstelle für die Enterprise-Bean: Hello
*/
public interface HelloHome extends javax.ejb.EJBHome {
/**
* Erstellt eine Standardinstanz der Session-Bean: Hello
*/
public tests.Hello create() throws javax.ejb.CreateException,
java.rmi.RemoteException;
}
Eine Bean-Implementierung
File : HelloBean.java
package tests;
/**
* Bean-Implementierungsklasse für 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;
// Geschäftsmethoden
// Alle Benutzer können getMessage() aufrufen.
public String getMessage() {
return message;
}
// Alle Benutzer können setMessage() aufrufen, aber nur wenige können eine
// neue Nachricht angeben.
public void setMessage(String s) {
// Caller der Bean mit getCallerPrincipal() ermitteln.
java.security.Principal principal = mySessionCtx.getCallerPrincipal();
java.lang.String callerId= principal.getName();
// Prüfen, ob Caller der Bean der Rolle Mgr angehört.
boolean isMgr = mySessionCtx.isCallerInRole("Mgr");
// Angegebene Nachricht nur ausgeben, wenn Caller "bob" ist oder der
// Rolle Mgr angehört.
if ( isMgr || callerId.equals("bob") )
message = s;
else
message = "Hello";
}
}
Nachdem Sie die Entity-Bean entwickelt haben, erstellen Sie im Implementierungsdeskriptor unter
der Session-Bean "Hello" wie folgt eine Referenz auf eine Sicherheitsrolle:
<security-role-ref>
<description>Only Managers can call setMessage() on this bean (Hello)</description>
<role-name>Mgr</role-name>
</security-role-ref>
Informationen zum Erstellen eines Elements <security-role-ref> finden Sie unter "Enterprise-Bean-Anwendungen sichern". Verwenden Sie die Informationen unter "security-role-ref- und role-name-Element einem role-link-Element zuordnen", um das Element zu erstellen.