Annotations dynamiques de la sécurité de servlet
Lorsque vous utilisez les API de programmation pour ajouter ou créer un servlet, vous pouvez mettre à jour de façon dynamique les annotations de sécurité RunAs, declareRoles et ServletSecurity par le biais des méthodes setRunAsRole(), declareRoles() et setServletSecurity() respectivement.
Lors du démarrage d'une application, le conteneur Web inspecte tous les servlets comportant les annotations RunAs, declareRoles et ServletSecurity, puis définit ces annotations sur la méthode setServletSecurity() de l'annotation ServletRegistration. Le conteneur Web demande au composant de sécurité d'inspecter toutes les annotations ServletRegistration comportant des modèles d'URL et des contraintes de sécurité. Le composant de sécurité détermine ensuite si un modèle d'URL est défini dans le descripteur de déploiement. Si une correspondance exacte est déjà définie dans le descripteur de déploiement, les contraintes de sécurité et le rôle RunAs dans le modèle d'URL du descripteur de déploiement sont utilisés à la place des données dynamiques.

Si l'annotation dynamique de sécurité contient une correspondance de modèle d'URL exacte pour l'annotation ServletSecurity, la contrainte de sécurité du modèle d'URL dans l'annotation dynamique de sécurité a la priorité. De même, si vous appelez la méthode setServletSecurity() plusieurs fois à l'aide du même modèle d'URL, la dernière a la priorité.
- ServletRegistration.Dynamic.setRunAsRole(String roleName) définit le nom du rôle RunAs pour cet enregistrement de servlet.
- ServletContext.declareRoles(String roleNames) déclare les noms de rôle qui sont testés pour la méthode isUserInRole().
- ServletRegistration.Dynmaic.setServletSecurity(ServletSecurityElement constraint) définit ServletSecurityElement pour cet enregistrement de servlet.
Les deux exemples ci-dessous permettent de définir les contraintes de sécurité et le rôle RunAs pour les servlets dynamiques à l'aide de la méthode setServletSecurity().
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);