Fermer

mai 9, 2024

Gestion de la méthode de réflexion non autorisée dans Sitecore / Blogs / Perficient

Gestion de la méthode de réflexion non autorisée dans Sitecore / Blogs / Perficient


Récemment, pour répondre aux exigences du projet, nous avons personnalisé et étendu la fonctionnalité de la fonctionnalité « Lien général » en incorporant une nouvelle fonctionnalité « Lien téléphonique ». Tout fonctionnait correctement sur notre instance de projet locale, mais nous avons obtenu l’erreur ci-dessous lorsque les modifications ont été déployées sur l’environnement supérieur.

Gestion de la méthode de réflexion non autorisée dans Sitecore

Exception: Sitecore.Exceptions.AccessDeniedException
Message: Calling Fieldtypes.ExtendedGeneralLink.ExtendedGeneralLinkForm.OnModeChange method through reflection is not allowed.
Source: Sitecore.Kernel
   at Sitecore.Reflection.MethodFilter.Filter[T](MethodInfo method)
   at Sitecore.Shell.Framework.Commands.CommandManager.GetMethodCommand(String command)
   at Sitecore.Web.UI.Sheer.ClientPage.Dispatch(String command)
   at Sitecore.Web.UI.Sheer.ClientPage.RaiseEvent()
   at Sitecore.Web.UI.Sheer.ClientPage.OnPreRender(EventArgs e)
   at System.Web.UI.Control.PreRenderRecursiveInternal()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Solutions : gestion de la méthode de réflexion non autorisée dans Sitecore

J’ai étudié le problème et découvert la solution fournie par Himmat Singh Dulawat dans ce article. Comme c’était la première fois que j’implémentais ces solutions de correctifs requises, je n’étais pas familier avec la hiérarchie appropriée des fichiers de correctifs ni avec le modèle qui devait être ajouté correctement. Vous trouverez ci-dessous la structure de configuration nécessaire pour ajouter le fichier de correctif.

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:security="http://www.sitecore.net/xmlconfig/security/" xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
     <reflection>
        <allowedMethods>
           <!--For example: <descriptor type="SampleNameSpace.MyClass" methodName="MyMethod" assemblyName="MyAssembly"/> -->
           <!--Allowed Methods-->
           <descriptor type="Fieldtypes.ExtendedGeneralLink.ExtendedGeneralLinkForm" hint="ExtendedGeneralLinkForm.OnModeChange" methodName="OnModeChange" assemblyName="Fieldtypes"/>
        </allowedMethods>
        <allowedPatterns>
            <!--Default-->
            <pattern value="^Sitecore\..*,Sitecore\..*$"/>
            <!--Add additional allowed method patterns-->
            <pattern value="^Fieldtypes\..*,Fieldtypes\..*$"/>
        </allowedPatterns>
     </reflection>
  </sitecore>
</configuration>

Dans notre situation, nous avons rencontré un problème où plusieurs « AllowedMethods » étaient présentes et nous avons ajouté toutes les méthodes dans le fichier de correctif. Cependant, après le déploiement et sa vérification à l’aide du fichier showconfig, seule la dernière méthode a été ajoutée dans le fichier AllowMethods.

En examinant les fichiers de correctifs, nous avons réalisé que puisque toutes les «allowedMethods» appartenaient à la même classe et que nous n’utilisions pas l’attribut «hint», seule la dernière méthode était nécessaire. Une fois que nous avons ajouté l’attribut « indice », notre problème a été résolu.

Clique le « GitHub – Patch de filtrage de réflexion» pour accéder à la configuration détaillée nécessaire pour résoudre le problème de réflexion.

Les modifications du fichier de configuration GitHub ont été initialement implémentées pour le «Extension du lien général pour l’éditeur d’expérience» améliorations. Tout fonctionnait correctement, ainsi que des configurations de fichiers de correctifs supplémentaires pour les réflexions. Cependant, après des tests approfondis, nous avons décidé d’optimiser notre code et de réduire le nombre de méthodes autorisées.

C’est pourquoi nous avons introduit le «Extension du lien général pour l’approche alternative de l’éditeur d’expérience.» Cette nouvelle approche a réduit la configuration AllowMethods de 7 à 1. Le code AllowMethods optimisé selon notre approche alternative est affiché ci-dessous.

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:security="http://www.sitecore.net/xmlconfig/security/" xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <reflection>
      <allowedMethods>
         <descriptor type="Fieldtypes.ExtendedGeneralLink.ExtendedGeneralLinkForm" hint="ExtendedGeneralLinkForm.OnModeChange" methodName="OnModeChange" assemblyName="Fieldtypes"/>
      </allowedMethods>
      <allowedPatterns>
         <pattern value="^Fieldtypes\..*,Fieldtypes\..*$"/>
      </allowedPatterns>
    </reflection>
  </sitecore>
</configuration>

Conclusion

Nous avons résolu l’erreur « Méthode de réflexion » en configurant la hiérarchie des fichiers de correctifs et en implémentant le modèle de méthode approprié. Cela a garanti une fonctionnalité fluide dans notre projet. De plus, nous avons optimisé notre code en réduisant le nombre de méthodes autorisées en suivant une approche alternative décrite dans le «Extension du lien général pour l’approche alternative de l’éditeur d’expérience» améliorations. Cela a rationalisé notre base de code, améliorant ainsi l’efficacité et la fiabilité.

J’espère que cela t’aides. Bon apprentissage!






Source link