Anotaciones dinámicas de seguridad de servlet

Cuando se utilizan las API de programación para añadir o crear un servlet, las anotaciones de seguridad RunAs, declareRoles y ServletSecurity, se pueden actualizar dinámicamente mediante los métodos setRunAsRole(), declareRoles() y setServletSecurity() respectivamente.

Nota: El soporte de la actualización dinámica de las anotaciones de seguridad de servlet RunAs, declareRoles y ServletSecurity es una novedad de este release de WebSphere Application Server.

Cuando se inicia una aplicación, el contenedor web inspecciona todos los servlets con las anotaciones RunAs, declareRoles y ServletSecurity y establece estas anotaciones en el método setServletSecurity() de la anotación ServletRegistration. El contenedor web notifica el componente de seguridad para inspeccionar todas las anotaciones ServletRegistration que tienen patrones de URL y restricciones de seguridad. A continuación, el componente de seguridad determina si hay un patrón de URL definido en el descriptor de despliegue. Si ya hay una coincidencia exacta definida en el descriptor de despliegue, se utilizan las restricciones de seguridad y el rol RunAs del patrón de URL del descriptor de despliegue en lugar de los datos dinámicos.

Avoid trouble Avoid trouble: Si se utilizan las anotaciones de seguridad dinámica, declareRoles, setRunAs y rolesAllowed, el nombre de rol debe ser predefinido, ya sea mediante el descriptor de despliegue o mediante las anotaciones declareRoles y/o RunAs de la clase de servlet. Durante el tiempo de despliegue, puede utilizar la consola administrativa para correlacionar un usuario o grupo a este rol. gotcha

Si tiene una coincidencia de patrón de URL exacta en la anotación ServletSecurity de la anotación dinámica de seguridad, tendrá prioridad la restricción de seguridad del patrón de URL en la anotación dinámica de seguridad. Asimismo, si llama al método setServletSecurity() varias veces con el mismo patrón de URL, el último tiene prioridad.

  • ServletRegistration.Dynamic.setRunAsRole(String roleName) establece el nombre del rol RunAS para este registro de servlet.
  • ServletContext.declareRoles(String roleNames) declara los nombres de rol que se prueban para el método isUserInRole().
  • ServletRegistration.Dynmaic.setServletSecurity(ServletSecurityElement constraint) establece ServletSecurityElement para este registro de servlet.
Nota: Si la propiedad del sistema de autenticación web, com.ibm.wsspi.security.web.webAuthReq, se establece en persisting, puede iniciar sesión en un URL no protegido si se proporcionan un usuario y una contraseña válidos.

Los dos ejemplos siguientes se pueden utilizar para establecer las restricciones de seguridad y el rol RunAs para servlets dinámicos utilizando el método setServletSecurity().

En este ejemplo, todos los elementos HTTP requieren pertenencia al rol Employee excepto el método PUT. Para el método PUT, el elemento <auth-constraint> requiere pertenencia al rol Manager y TransportGuarantee es confidencial.
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);
En este ejemplo, todos los métodos HTTP están permitidos excepto para los métodos CUSTOM y GET. Para el método PERSONALIZADO, el elemento the <auth-constraint> requiere pertenencia al rol Manager. Para el método GET, el elemento <auth-constraint> requiere pertenencia al rol Employee y TransportGuarantee es confidencial.
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);

Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=csec_dynamic_annotations
File name: csec_dynamic_annotations.html