Personalización de MVC Spring y del controlador de tienda

La infraestructura MVC (Modelo Vista Controlador) que se utiliza para la tienda es Spring. Spring es popular, está soportada y es fácil de adoptar para los desarrolladores con la infraestructura Struts anterior y con experiencia sobre HCL Commerce. En la información siguiente, se detalla la implementación de MVC Spring de la tienda y se ofrecen detalles sobre cómo personalizar las acciones y las vistas. Una vez realizadas las personalizaciones, deberán realizarse las modificaciones pertinentes en las configuraciones de la plantilla de REST.

Para obtener más información sobre la infraestructura Spring y su API, consulte:

El servidor de tienda implementa tres controladores de tienda para cumplir sus funciones:
RESTActionController
Este componente es el controlador de infraestructura básico, que gestiona las funciones básicas de carga de los servicios y la configuración de la infraestructura, la validación de peticiones con acciones REST configuradas y ejecuta las acciones. Maneja solicitudes de página tradicionales. En el entorno separado de la tienda, llama al servicio REST de rutina de carga para interactuar con el servidor de transacciones para ejecutar la lógica de negocio.
AjaxRESTActionController
Maneja solicitudes Ajax. En el entorno de separación de tienda, también llama al servicio REST de rutina de carga.
ViewController
El controlador de vista de la página. No ejecuta las acciones REST de acuerdo con las plantillas REST.

Personalización de MVC de la tienda

Dado que el servidor de transacciones maneja la mayor parte de la lógica de negocio mediante REST, la ampliación de métodos de la clase RESTActionController permite que el servidor de la tienda maneje y pase correctamente la información.

El controlador Action (Acción) de REST realiza las acciones siguientes para comunicarse con el servidor de transacciones:
  1. Resuelve el parámetro de entrada que incluye el descifrado del parámetro de cifrado y las validaciones de parámetros.
  2. Convierte el parámetro de entrada en el URL REST y la serie JSON mediante la plantilla REST.
  3. Llama a la API REST con ese URL REST y la serie JSON.
  4. Procesa la respuesta de la API REST y vuelve a la vista adecuada.

Controladores de acción

Figura 1.

En el siguiente ejemplo, se muestra una correlación de URL con un controlador de vista en el archivo workspace_dir/crs-web/WebContent/WEB-INF/spring/controllers.xml:

<prop key="1/Logon">2logon</prop>
Nota: Si es necesario realizar la personalización específica de la tienda, se puede utilizar un postfijo de alias de tienda. Por ejemplo:

<prop key="/Logon/AuroraStorefrontAssetStore">mylogon</prop>

Donde el alias es el nombre del directorio de la tienda tal como está establecido en la base de datos.

  • 1 La clave /Logon es el nombre de vía de acceso del URL de acción de la solicitud HTTP.
  • 2 El valor del elemento logon es el nombre del bean de controlador.
Figura 2.
El ejemplo siguiente es una definición de bean de controlador de acción en el archivo workspace_dir/crs-web/WebContent/WEB-INF/spring/member-controllers.xml:
<bean id="1logon" class="2com.ibm.commerce.store.mvc.controller.spring.LogonController">
<property name="https" value="1"/>
<property name="authenticate" value="0"/>
<property name="credentialsAccepted" value="P"/>
<property name="parameter" value="loginIdentityHandler.logon"/>
<property name="generic" value="1"/></bean>
  • 1 El ID de bean logon debe coincidir con el valor del elemento prop en la correlación de URL con bean.
  • 2 La clase LogonController es la clase de bean.
  • Los elementos de propiedad son las propiedades de petición HTTP de la acción.

Cada controlador de acción predeterminado es de la clase RESTActionController o su extensión (como por ejemplo LogonController), y cada acción llama a un servicio REST para procesar la lógica de negocio.

Las siguientes propiedades de petición HTTP están soportadas por acciones:
https
Especifica si la petición necesita la redirección HTTPS cuando se envía en HTTP. El valor de 1 indica que se esperaba recibir la petición en un canal seguro (HTTPS) y se emite una redirección al puerto SSL si se recibe en un canal no seguro (HTTP).
credentialsAcceped
Especifica si la petición permite credenciales parciales. Un valor de P indica que los usuarios autenticados parcialmente están autorizados a acceder a este recurso. Los usuarios autenticados parcialmente son aquellos usuarios que han finalizado la sesión, pero que están en un estado de usuario recordado. Es decir, cuando rememberMe está establecido en true para el mandato Logoff.
genéricos
Especifica si la petición permite que los usuarios genéricos la llamen. Un valor de 1 indica que la petición no permite la ejecución genérica y no se crea un usuario invitado.
authenticate
Especifica si únicamente los usuarios registrados pueden invocar la petición. Un valor 1 indica que es preciso que el usuario inicie la sesión para este URI. Únicamente los usuarios no invitados y no genéricos pueden acceder a las páginas cuando esta propiedad está establecida en 1.
csrfProtected
Especifica si la petición está protegida por CSRF. Un valor de 1 indica que se habilita la protección de falsificación entre sitios para esta petición.
parameter
El nombre del servicio REST que se invoca. Los servicios REST correspondientes se definen en las plantillas REST, que se encuentran en workspace_dir/crs-web/WebContent/WEB-INF/xml/config/com.ibm.commerce.component_name/rest-template-config.xml.

Controladores de vista

Figura 3.
El siguiente ejemplo es una correlación de URL con un controlador de vista en el archivo controllers.xml:
<prop key="1/CategoryDisplay">2browsingController</prop>
<prop key="/TopCategoriesDisplay">browsingController</prop>
<prop key="*">viewController</prop>
  • 1 La clave /CategoryDisplay es el nombre de vía de acceso del URL de acción de la solicitud HTTP.
  • 2 El valor del elemento browsingController es el nombre del bean de controlador.
    Dos tipos de controladores se utilizan para comprobar la seguridad y recuperar objetos de vista Spring (ModelAndView Object):
    • browsingControllerpara las vistas relacionadas con el catálogo: CategoryDisplay y TopCategoriesDisplay. browsingController incluye lógica para recuperar y guardar parámetros de solicitud (catelogId, categoryId, productId) durante la fase de preproceso y establecer esos parámetros en solicitudes HTTP durante la fase de postproceso.
    • viewController para las vistas ordinarias.
    Los controladores incluyen un comportamiento común, como cuando ejecutan servicios con distintas acciones de preproceso y postproceso, tal y como se define en los métodos AbstractWebControllerExecutor.preprocess y postprocess. Se utiliza la siguiente cadena de mandatos:
    • Para preproceso: Parámetros de solicitud > Lista blanca > Scripts Cross-site > Tiempo de espera de conexión > CSRF > Autenticación > Redirección de HTTPS > Credenciales parciales > Solicitud no genérica
    • Para postproceso: Parámetros de respuesta > Actualización de cookies persistente > Actualización de sesión
    Nota: Aunque los fragmentos de código siguientes muestran las definiciones de viewController en los archivos de vistas XML, la lógica browsingController se define en la clase com.ibm.commerce.store.mvc.controller.spring.BrowsingViewController.
Figura 4.

El ejemplo siguiente es una definición de bean de controlador de vista en el archivo workspace_dir/crs-web/WebContent/WEB-INF/spring/order-views.xml:

<bean 1id="AjaxOrderItemDisplayView/2-21" 3class="com.ibm.commerce.store.mvc.view.spring.StoreInternalResourceView">
<property 4name="url" value="/mobile30/ShoppingArea/ShopcartSection/OrderItemDisplay.jsp"/>
<property name="https" value="1"/>
<property name="credentialsAccepted" value="P"/>
<property name="generic" value="1"/>
</bean>
  • 1 El ID de bean AjaxOrderItemDisplayView corresponde al nombre de vía de acceso de URL sin ninguna barra inclinada.
  • 2 Opcional: El ID de dispositivo /-21 indica que este controlador de vista es la versión móvil del controlador de vista. Si se detecta un dispositivo móvil mediante el usuario-agente de navegador, entonces se utilizará la versión /-21 para obtener la vista adecuada.
    Nota:
    • El ID de dispositivo solo es necesario si el controlador se comparte entre dos o más tipos de dispositivos. Por ejemplo, si hay diferencias entre una versión de escritorio y móvil de AjaxOrderItemDisplayView. Si el controlador de vista es de un tipo de dispositivo específico, no será necesario. Por ejemplo, si el controlador de vista es únicamente de tipo móvil, entonces se puede omitir /-21.
    • Los ID de dispositivo no se pueden personalizar. El único ID de dispositivo que está activo es /-21 y se correlaciona con los controladores de dispositivo que coinciden con los dispositivos Android o iOS.
  • 3 El atributo de clase com.ibm.commerce.store.mvc.view.spring.StoreInternalResourceView es la implementación de la vista JSTL (Spring Java Standard Tag Library).
  • 4 El valor de la propiedad url, /mobile30/ShoppingArea/ShopcartSection/OrderItemDisplay.jsp, es la ubicación de envío de la vista.
Los elementos de propiedad adicionales son las propiedades de la petición HTTP de esta vista. Las siguientes propiedades de petición HTTP están soportadas por vistas:
https
Si la petición necesita la dirección HTTPS cuando se envía en HTTP. El valor de 1 indica que se esperaba recibir la petición en un canal seguro (HTTPS) y se emite una redirección al puerto SSL si se recibe en un canal no seguro (HTTP).
credentialsAcceped
Especifica si la petición permite credenciales parciales. Un valor de P indica que los usuarios autenticados parcialmente están autorizados a acceder a este recurso. Los usuarios autenticados parcialmente son aquellos usuarios que han finalizado la sesión, pero que están en un estado de usuario recordado. Es decir, cuando rememberMe está establecido en true para el mandato Logoff.
genéricos
Especifica si la petición permite que los usuarios genéricos la llamen. Un valor de 0 indica que la petición no permite la ejecución genérica y se crea automáticamente un usuario invitado cuando la petición se envía en genérico.
authenticate
Especifica si únicamente los usuarios registrados pueden invocar la petición. Un valor 1 indica que es preciso que el usuario inicie la sesión para este URI. Únicamente los usuarios no invitados y no genéricos pueden acceder a las páginas cuando esta propiedad está establecida en 1.
csrfProtected
Especifica si la petición está protegida por CSRF. Un valor 1 indica que se habilita la protección de falsificación entre sitios para esta petición.
storeDir
Especifica si la ubicación de reenvío debe añadirse después del directorio específico de la tienda. El valor no indica que este URL es relativo al directorio de la tienda. Todos los demás valores, o bien en el caso de que no se hayan especificado, significan que el URL es relativo al directorio de archivo JSP (JavaServer Page) raíz.
skipAccessControlCheck
Especifica si esta vista se verifica frente a las políticas de control de accesos a vistas que se han configurado en la base de datos. Un valor 1 significa que el control de acceso no se ha comprobado para esta vista. Esta opción la proporcionan clientes para añadir nuevas vistas. De forma predeterminada, se comprueba el control de accesos de las vistas. Para cargar las políticas de control de accesos en la base de datos para nuevas vistas, consulte Cargar datos de política de control de acceso.
targetServletName
El nombre del servlet de destino para JavaServer Page (JSP). Esta propiedad se utiliza para localizar las vistas entre diferentes archivadores web (WAR).