Sie können Ihre Java™ EE-Unternehmensanwendung
mithilfe von Annotationen direkt im Quellcode schützen.
Allgemeine Sicherheitsannotationen: JSR 250 definiert einige allgemeine
Sicherheitsannotationen. Es sind fünf Sicherheitsannotationen definiert:
- javax.annotation.security.PermitAll:
- Kann auf Typ- oder Methodenebene verwendet werden.
- Gibt an, dass alle Benutzer auf die angegebene Methode oder auf alle Geschäftsmethoden der angegebenen EJB
zugreifen können.
- javax.annotation.security.DenyAll:
- Kann auf Methodenebene verwendet werden.
- Gibt an, dass kein Benutzer auf die angegebene Methode in der EJB zugreifen kann.
- javax.annotation.security.RolesAllowed:
- Kann auf Typ- oder Methodenebene verwendet werden.
- Gibt an, dass auf die angegebene Methode oder alle Geschäftsmethoden im EJB
die Benutzer zugreifen können, die der Liste der Rollen zugeordnet sind.
- javax.annotation.security.DeclareRoles:
- Kann auf Typebene verwendet werden.
- Definiert Rollen für die Sicherheitsprüfung. Muss von EJBContext.isCallerInRole,
HttpServletRequest.isUserInRole und WebServiceContext.isUserInRole verwendet werden.
- javax.annotation.security.RunAs:
- Kann auf Typebene verwendet werden.
- Gibt die Rolle "Ausführen als" für die angegebenen Komponenten an.
Sicherheitsannotationen verwenden
- Für die Annotationen "@PermitAll", "@DenyAll" und "@RolesAllowed" gilt eine Annotation auf
Klassenebene für eine Klasse und eine Annotation auf Methodenebene für eine Methode.
Eine Annotation auf Methodenebene überschreibt das Verhalten
einer Annotation auf Klassenebene.
@Stateless
@RolesAllowed("team")
public class TestEJB implements Test {
@PermitAll
public String hello(String msg) {
return "Hello, " + msg;
}
public String goodbye(String msg) {
return "Goodbye, " + msg;
}
}
In diesem Beispiel können alle Benutzer auf die Methode "hello()" zugreifen,
auf die Methode "goodbye()" jedoch nur Benutzer der Rolle "team".
- Die Annotation "@DeclareRoles" definiert eine Liste von Rollen, die von einer
angegebenen Komponente verwendet werden sollen. In der Java EE-Umgebung der Versionen
5 oder 6 können Sie mithilfe von @javax.annotation.Resource nach der Ressource suchen und
überprüfen, ob der Benutzer die angegebene Rolle hat, indem Sie die folgenden APIs
aufrufen:
Tabelle 1. . Von der Java EE-Komponente verwendete APIKomponente |
Zur Überprüfung der Rolle verwendete API |
EJB |
javax.ejb.EJBContext.isCallerInRole(role) |
Servlet |
javax.servlet.http.HttpServletRequest.isUserInRole(role) |
Web-Service |
javax.xml.ws.WebServiceContext.isUserInRole(role) |
- Mit den Annotationen "@PermitAll", "@DenyAll" und "@RolesAllowed" können Sie die meisten
Berechtigungsentscheidungen implementieren. Wenn Sie jedoch komplexere Logik erstellen möchten, müssen
Sie die Annotation "@DeclareRoles" verwenden. Auf die Methode "hello" soll z. B. ein Benutzer zugreifen
können, der Rolle A hat, jedoch nicht gleichzeitig Rolle
B. Dieses Ziel können Sie mit folgendem Code erreichen:
@Stateless
@DeclaresRoles({"A", "B"})
public class TestEJB implements Test {
@Resource private SessionContext sc;
public String hello(String msg) {
if (sc.isCallerInRole("A") && !sc.isCallerInRole("B")) {
...
} else {
...
}
}
}
Ungültige Verwendung von Sicherheitsannotationen