AEM Los componentes y las plantillas de forman un conjunto de herramientas muy potente. Los desarrolladores pueden utilizarlas para proporcionar a los usuarios, editores y administradores de sitios web la funcionalidad de adaptar sus sitios web a las cambiantes necesidades comerciales (agilidad de los contenidos), manteniendo al mismo tiempo el diseño uniforme de los sitios (protección de la marca).
Un desafío típico para una persona responsable de un sitio web o un conjunto de sitios web (por ejemplo, en una sucursal de una empresa global) es introducir un nuevo tipo de presentación de contenido en sus sitios web.
Supongamos que es necesario agregar una página de lista de noticias a los sitios web, que enumera extractos de otros artículos ya publicados. La página debe tener el mismo diseño y estructura que el resto del sitio web.
La manera recomendada de abordar ese problema sería la siguiente:
Esto ilustra cómo este enfoque permite a los usuarios y administradores colaboradores del sitio web responder a las necesidades comerciales rápidamente, sin requerir la participación de equipos de desarrollo. Los métodos alternativos, como la creación de una nueva plantilla, suelen ser un ejercicio costoso, que requiere un proceso de gestión del cambio y la participación del equipo de desarrollo. Esto hace que todo el proceso sea mucho más largo y costoso.
AEM Por lo tanto, los desarrolladores de sistemas basados en el uso de deben utilizar:
Las siguientes reglas generales para desarrolladores tienen sentido en la mayoría de los proyectos habituales:
Al crear sus propios componentes o personalizar un componente existente, a menudo es más fácil (y seguro) reutilizar las definiciones existentes. AEM Los mismos principios también se aplican a otros elementos dentro de la, por ejemplo, el controlador de errores.
Esto se puede hacer copiando y superponiendo la definición existente. Es decir, copiar la definición de /libs
hasta /apps/<your-project>
. Esta nueva definición, en /apps
, se puede actualizar según sus necesidades.
Consulte Uso de superposiciones para obtener más información.
Por ejemplo:
Esto implicaba superponer una definición de componente:
Cree una nueva carpeta de componentes en /apps/<website-name>/components/<MyComponent>
copiando un componente existente:
Por ejemplo, para personalizar la copia del componente Texto:
/libs/foundation/components/text
/apps/myProject/components/text
Personalizar páginas mostradas por el Controlador de errores
Este caso implica la superposición de un servlet:
En el repositorio, copie los scripts predeterminados:
/libs/sling/servlet/errorhandler/
/apps/sling/servlet/errorhandler/
Usted no debe cambiar cualquier cosa en /libs
ruta.
Esto se debe al contenido de /libs
se sobrescribe la próxima vez que actualice la instancia (y es posible que se sobrescriba al aplicar una revisión o un paquete de funciones).
Para cambios de configuración y de otro tipo:
/libs
hasta /apps
/apps
Las consultas JCR son una herramienta potente cuando se utilizan correctamente. Son adecuados para:
consultas reales del usuario final, como búsquedas de texto completo en el contenido.
ocasiones en las que es necesario encontrar contenido estructurado en todo el repositorio.
En estos casos, asegúrese de que las consultas solo se ejecuten cuando sean absolutamente necesarias, por ejemplo en la activación de componentes o la invalidación de la caché (en oposición a, por ejemplo, Pasos de flujos de trabajo, Controladores de eventos que almacenan en déclencheur las modificaciones de contenido, Filtros, etc.).
Las consultas JCR nunca deben utilizarse para solicitudes de procesamiento puras. Por ejemplo, las consultas JCR no son apropiadas para
Para procesar contenido, utilice el acceso de navegación al árbol de contenido en lugar de realizar una consulta JCR.
Si usa el Generador de consultas, utilice Consultas JCR, ya que el Generador de consultas genera Consultas JCR bajo el capó.
También merece la pena hacer referencia a la lista de comprobación de seguridad.
Debe utilizar la sesión del usuario, no la sesión administrativa. Esto significa que debe utilizar:
slingRequest.getResourceResolver().adaptTo(Session.class);
El proceso de ejecución de scripts en sitios múltiples (XSS) permite a los atacantes insertar código en páginas web que han visto otros usuarios. Los usuarios web malintencionados pueden aprovechar esta vulnerabilidad de seguridad para evitar los controles de acceso.
AEM Se aplica el principio de filtrado de todo el contenido proporcionado por el usuario en la salida. La prevención de XSS tiene la máxima prioridad tanto durante el desarrollo como durante las pruebas.
Además, un cortafuegos de aplicaciones web, como mod_security para Apache, puede proporcionar un control central y fiable sobre la seguridad del entorno de implementación y proteger contra ataques de scripts entre sitios que no se habían detectado anteriormente.
AEM El código de ejemplo proporcionado con puede no protegerse contra estos ataques y, por lo general, se basa en el filtrado de solicitudes por un cortafuegos de aplicaciones web.
AEM La hoja de trucos de la API XSS contiene información que necesita saber para utilizar la API XSS y hacer que una aplicación de la aplicación sea más segura. Puede descargarlo aquí:
La hoja de trucos de XSSAPI.
Como para cualquier aplicación de Internet, asegúrese de que al transportar información confidencial
Esto se aplica a la información que es confidencial para el sistema (como la configuración o el acceso administrativo), así como a la información confidencial para sus usuarios (como sus datos personales)
AEM Las páginas de error se pueden personalizar para la creación de informes de. Esto es aconsejable para que la instancia no muestre los seguimientos de sling en los errores internos del servidor.
Consulte Personalizar páginas de error mostradas por el controlador de error para obtener información detallada.
AEM Debido a que puede acceder a un gran número de archivos, se recomienda que el número de abrir archivos para un proceso de Java AEM se configurarán explícitamente para la configuración de la.
Para minimizar este problema, el desarrollo debe garantizar que cualquier archivo abierto se cierre correctamente lo antes posible (de forma significativa).