Dynamische Annotationen für Servletsicherheit
Wenn Sie die programmgesteuerten APIs für das Hinzufügen oder Erstellen eines Servlets verwenden, können die Sicherheitsannotationen "RunAs", "declareRoles" und "ServletSecurity" dynamisch mit der Methode "setRunAsRole()", "declareRoles()" bzw. "setServletSecurity()" dynamisch aktualisiert werden.
Wenn eine Anwendung gestartet wird, untersucht der Web-Container alle Servlets mit den Annotationen "RunAs", "declareRoles" und "ServletSecurity" und setzt diese Annotationen in der Methode "setServletSecurity()" der Annotation "ServletRegistration". Der Web-Container weist die Sicherheitskomponente an, alle Annotationen "ServletRegistration" mit URL-Mustern und Sicherheitsvorgaben zu untersuchen. Daraufhin stellt die Sicherheitskomponente fest, ob ein URL-Muster im Implementierungsdeskriptor definiert ist. Wenn bereits eine exakte Übereinstimmung im Implementierungsdeskriptor definiert ist, werden die Sicherheitsvorgaben und die RunAs-Rolle im URL-Muster des Implementierungsdeskriptors anstelle der dynamischen Daten verwendet.

Wenn Sie eine exakte URL-Musterübereinstimmung für die Annotation "ServletSecurity" in der dynamischen Annotation für die Sicherheit haben, hat die Integritätsbedingung für die Sicherheit des URL-Musters in der dynamischen Annotation für die Sicherheit Vorrang. Wenn Sie die Methode "setServletSecurity()" mehrfach mit demselben URL-Muster aufrufen, hat die jeweils letzte Vorrang.
- ServletRegistration.Dynamic.setRunAsRole(String roleName) legt den Namen der RunAs-Rolle für diese Servletregistrierung fest.
- ServletContext.declareRoles(String roleNames) deklariert die Rollennamen, die für die Methode "isUserInRole()" getestet werden.
- ServletRegistration.Dynmaic.setServletSecurity(ServletSecurityElement constraint) legt das ServletSecurityElement für diese Servletregistrierung fest.
Die folgenden beiden Beispiele können verwendet werden, um die Integritätsbedingungen für die Sicherheit und die RunAs-Rolle für dynamische Servlets mit der Methode "setServletSecurity()" zu definieren.
HttpConstraintElement constraint = new HttpConstraintElement(TransportGuarantee.NONE,
new String[]{"Employee"});
List<HttpMethodConstraintElement> methodConstraints =
new ArrayList<HttpMethodConstraintElement>();
methodConstraints.add(new HttpMethodConstraintElement("PUT",
new HttpConstraintElement(TransportGuarantee.CONFIDENTIAL, new String[]{"Manager"})));
ServletSecurityElement servletSecurity =
new ServletSecurityElement(constraint, methodConstraints);
HttpConstraintElement constraint = new HttpConstraintElement();
List<HttpMethodConstraintElement> methodConstraints =
new ArrayList<HttpMethodConstraintElement>();
methodConstraints.add(new HttpMethodConstraintElement("CUSTOM",
new HttpConstraintElement(TransportGuarantee.NONE, new String[]{"Manager"})));
methodConstraints.add(new HttpMethodConstraintElement("GET",
new HttpConstraintElement(TransportGuarantee.CONFIDENTIAL, new String[]{"Employee"})));
ServletSecurityElement servletSecurity = new ServletSecurityElement(constraint,
methodConstraints);