Personnalisation de l'infrastructure MVC Spring et du contrôleur de magasin

L'infrastructure MVC (model-view-controller) utilisée pour le magasin est Spring. Spring est populaire, pris en charge et facile à adopter par les développeurs ayant déjà une expérience Struts et HCL Commerce. Les informations suivantes détaillent l'implémentation de l'infrastructure MVC Spring du magasin ainsi que la personnalisation des actions et des vues. Une fois les personnalisations effectuées, des modifications doivent être apportées aux configurations du modèle REST.

Pour plus d'informations sur l'infrastructure Spring et son API, voir :

Le serveur de magasin implémente trois contrôleurs pour remplir ses fonctions :
RESTActionController
Ce composant est le contrôleur principal de l'infrastructure, qui gère les fonctions de base de chargement des services et de configuration de l'infrastructure, la validation des demandes et le mappage des demandes avec les actions REST configurées et exécute les actions. Gère les demandes de page traditionnelles. Dans l'environnement de séparation du magasin, il appelle le service REST de backend pour interagir avec le serveur de transactions afin d'exécuter la logique métier.
AjaxRESTActionController
Gère les requêtes Ajax. Dans l'environnement de séparation de magasin, il appelle également le service REST de backend.
ViewController
Contrôleur pour la vue de page. Il n'exécute pas d'actions REST selon les modèles REST.

Personnalisation de l'infrastructure MVC du magasin

Etant donné que la plus grande partie de la logique métier est gérée par le serveur de transactions via REST, l'extension des méthodes dans la classe RESTActionController permet de gérer et de transmettre correctement les informations via le serveur du magasin.

Le contrôleur d'action REST effectue les opérations suivantes pour communiquer avec le serveur de transactions :
  1. Résout le paramètre d'entrée qui inclut le déchiffrement du paramètre de chiffrement et les validations de paramètre.
  2. Convertit le paramètre d'entrée en URL REST et en chaîne JSON à l'aide du modèle REST.
  3. Appelle l'API REST avec cette URL REST et cette chaîne JSON.
  4. Traite la réponse de l'API REST et revient à la vue appropriée.

Contrôleurs d'action

Figure 1.

L'exemple suivant illustre un mappage d'URL vers un contrôleur d'affichage dans le fichier workspace_dir/crs-web/WebContent/WEB-INF/spring/controllers.xml :

<prop key="1/Logon">2logon</prop>
Remarque : Si une personnalisation spécifique au magasin est nécessaire, un postfix d'alias de magasin peut être utilisé. Par exemple :

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

Où l'alias est le nom du répertoire du magasin tel qu'il est défini dans la base de données.

  • 1 La clé /Logon est le nom de chemin de l'URL de l'action pour la requête HTTP.
  • 2 La valeur de l'élément logon est le nom du bean du contrôleur.
Figure 2.
L'exemple suivant est une définition de bean du contrôleur d'action dans le fichier 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 L'ID bean logon doit correspondre à la valeur de l'élément prop dans le mappage URL-bean.
  • 2 La classe LogonController est la classe du bean.
  • Les éléments de propriété sont les propriétés de demande HTTP pour l'action.

Chaque contrôleur d'action par défaut appartient à la classe RESTActionController ou à son extension (telle que LogonController) et chaque action appelle un service REST pour le traitement de la logique métier.

Les propriétés de demande HTTP suivantes sont prises en charge par les actions :
https
Indique si la demande nécessite une redirection HTTPS lorsqu'elle est envoyée au format HTTP. La valeur 1 indique que la requête devait être reçue sur un canal sécurisé (HTTPS) et qu'une redirection vers le port SSL est émise si elle est reçue sur un canal non sécurisé (HTTP).
credentialsAcceped
Indique si la demande autorise les données d'identification partielles. La valeur P indique que les utilisateurs partiellement authentifiés ont le droit d'accéder à cette ressource. Les utilisateurs partiellement authentifiés sont ceux qui sont déconnectés, mais se trouvent dans un état utilisateur mémorisé. C'est-à-dire, lorsque rememberMe est défini sur true pour la commande Logoff.
générique
Indique si la demande autorise les utilisateurs génériques à l'appeler. La valeur 1 indique que la requête autorise l'exécution générique et qu'un utilisateur invité est créé.
authenticate
Indique si la demande ne peut être appelée que par les utilisateurs enregistrés. La valeur 1 indique que la connexion de l'utilisateur est requise pour cet URI. Seuls les utilisateurs non invités et non génériques sont autorisés à accéder aux pages avec cette propriété définie sur 1.
csrfProtected
Indique si la demande est protégée par CSRF. La valeur 1 indique que la protection contre les falsifications de requête inter-sites est activée pour cette requête.
paramètre
Nom du service REST à appeler. Les services REST correspondants sont définis dans les modèles REST, situés dans workspace_dir/crs-web/WebContent/WEB-INF/xml/config/com.ibm.commerce.component_name/rest-template-config.xml.

Contrôleurs d'affichage

Figure 3.
L'exemple suivant illustre un mappage d'URL vers un contrôleur de vue dans le fichier controllers.xml :
<prop key="1/CategoryDisplay">2browsingController</prop>
<prop key="/TopCategoriesDisplay">browsingController</prop>
<prop key="*">viewController</prop>
  • 1 La clé /CategoryDisplay est le nom de chemin de l'URL de l'action pour la requête HTTP.
  • 2 La valeur de l'élément browsingController est le nom du bean du contrôleur.
    Deux types de contrôleurs sont utilisés pour vérifier la sécurité et récupérer les objets de vue Spring (ModelAndView Object) :
    • browsingController pour les vues relatives au catalogue : CategoryDisplay et TopCategoriesDisplay. browsingController contient une logique pour récupérer et enregistrer les paramètres de requête (catelogId, categoryId, productId) pendant l'étape de pré-traitement, et définir ces paramètres pour les requêtes HTTP pendant la phase de post-traitement.
    • viewController pour des vues ordinaires.
    Les contrôleurs contiennent un comportement commun, tel que l'exécution de services avec différentes actions de pré-traitement et de post-traitement, comme défini dans les méthodes AbstractWebControllerExecutor.preprocess et postprocess. La chaîne de commandes suivante est utilisée :
    • Pour le pré-traitement : Paramètres de requête > Liste blanche > Scripts intersite > Délai d'attente de connexion > CSRF > Authentification > Redirection HTTPS > Informations d'identification partielles > Requête non générique
    • Pour le post-traitement : Paramètres de réponse > Mise à jour des cookies persistants > Mise à jour de session
    Remarque : Alors que les fragments de code suivants affichent les définitions viewController dans les fichiers XML des vues, la logique browsingController est définie dans la classe com.ibm.commerce.store.mvc.controller.spring.BrowsingViewController.
Figure 4.

L'exemple suivant est une définition de bean du contrôleur de vue dans le fichier 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 L'ID bean AjaxOrderItemDisplayView correspond au nom de chemin d'URL sans barre oblique.
  • 2 Facultatif : l'ID de périphérique /-21 indique que ce contrôleur de vue est la version mobile du contrôleur de vue. Si un périphérique mobile est détecté via l'agent utilisateur du navigateur, la version /-21 est utilisée pour renvoyer la vue appropriée.
    Remarque :
    • L'ID d'appareil est uniquement requis si le contrôleur est partagé entre deux ou plusieurs types d'appareil. Par exemple, si des différences existent entre une version bureau et une version mobile de AjaxOrderItemDisplayView. Si le contrôleur d'affichage est spécifique au type d'appareil, il n'est pas requis. Par exemple, si le contrôleur de vue est uniquement mobile, alors /-21 peut être omis.
    • Les ID d'appareil ne sont pas personnalisables. Le seul ID de périphérique actif est /-21 et il est mappé aux navigateurs correspondant aux périphériques Android ou iOS.
  • 3 L'attribut de classe com.ibm.commerce.store.mvc.view.spring.StoreInternalResourceView est l'implémentation de la vue JSTL (Spring Java Standard Library).
  • 4 La valeur de la propriété url, /mobile30/ShoppingArea/ShopcartSection/OrderItemDisplay.jsp, est l'emplacement de transfert de la vue.
Les éléments de propriété supplémentaires sont les propriétés de demande HTTP pour cette vue. Les propriétés de demande HTTP suivantes sont prises en charge par les vues :
https
Indique si la demande nécessite une redirection HTTPS lorsqu'elle est envoyée au format HTTP. La valeur 1 indique que la requête devait être reçue sur un canal sécurisé (HTTPS) et qu'une redirection vers le port SSL est émise si elle est reçue sur un canal non sécurisé (HTTP).
credentialsAcceped
Indique si la demande autorise les données d'identification partielles. La valeur P indique que les utilisateurs partiellement authentifiés ont le droit d'accéder à cette ressource. Les utilisateurs partiellement authentifiés sont ceux qui sont déconnectés, mais se trouvent dans un état utilisateur mémorisé. C'est-à-dire, lorsque rememberMe est défini sur true pour la commande Logoff.
générique
Indique si la demande autorise les utilisateurs génériques à l'appeler. La valeur 0 indique que la requête n'autorise pas l'exécution générique et qu'un utilisateur invité est créé automatiquement lorsque la requête est envoyée en générique.
authenticate
Indique si la demande ne peut être appelée que par les utilisateurs enregistrés. La valeur 1 indique que la connexion de l'utilisateur est requise pour cet URI. Seuls les utilisateurs non invités et non génériques sont autorisés à accéder aux pages avec cette propriété définie sur 1.
csrfProtected
Indique si la demande est protégée par CSRF. La valeur 1 indique que la protection contre les falsifications de requête inter-sites est activée pour cette requête.
storeDir
Indique si l'emplacement de transfert doit être ajouté après le répertoire spécifique au magasin. La valeur no indique que cette URL est relative au répertoire du magasin. Toutes les autres valeurs ou les valeurs non spécifiées signifient que le chemin de l'URL est relatif au répertoire racine des fichiers de pages JavaServer (fichier JSP).
skipAccessControlCheck
Indique si cette vue est vérifiée par rapport aux stratégies de contrôle d'accès à la vue configurées dans la base de données. La valeur 1 signifie que le contrôle d'accès n'est pas vérifié pour cette vue. Cette option est fournie par les clients pour l'ajout de nouvelles vues. Par défaut, le contrôle d'accès des vues est vérifié. Pour charger les stratégies de contrôle d'accès dans la base de données pour de nouvelles vues, voir Chargement de données de stratégie de contrôle d'accès.
targetServletName
Nom du servlet cible pour la page JavaServer (JSP). Cette propriété est utilisée pour localiser des vues sur différentes archives Web (WAR).