IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web avec .NET Discussion :

Passer l'utilisateur à travers les couches


Sujet :

Développement Web avec .NET

  1. #1
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut Passer l'utilisateur à travers les couches
    Bonjour,

    j'ai une application web assez classique (UI Layer, Business Layer, Dao Factory Layer) qui utilise IoC pour les appels à la couche inférieure.

    J'aimerais uniformiser mes logs (via log4net) du style [USER][CLASS][METHOD] Message
    Du coup, il me faudrait réussir à passer mon user à travers les couches de mon application mais si possible j'aimerais éviter de devoir l'ajouter à toutes les signatures de mes fonctions.

    Connaissez-vous un bon moyen de faire cela ? Avez-vous des préco sur le sujet ?

    Merci d'avance
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Mmmh, normalement la logique d'authentification est cross-layer (inter-couches).
    Sur log4net tu peux définir des pattern et des variables par thread ou process et elles peuvent justement contenir le nom de l'utilisateur en cours.

  3. #3
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Tu connais un tuto expliquant cela ? Mais je suis en effet parti sur cette voie
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Alors j'ai envie de dire ca dépend
    Pour du web, je pense qu'il faut dans ton global.asax.cs chopper le begin request. Après comme indiqué là dessus http://logging.apache.org/log4net/re.../contexts.html tu peux utiliser le contexte:
    log4net.ThreadContext.Properties["UserLogin"] = value;
    Alors le value, c'est la ou ca dépend comme tu récuperes le login de l'utilisateur. Grosso modo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(HttpRequest.Current.IsAuthenticated)
    {
        log4net.ThreadContext.Properties["UserLogin"] = HttpRequest.Current.LogonUserIdentity.User;
    }
    else
    {
        log4net.ThreadContext.Properties["UserLogin"] = "Anonymous";
    }
    et le pattern log4net nécessite la variable %property{UserLogin}

  5. #5
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Du coup j'avais trouvé pour log4net et pour le thread j'avais utilisé quelque chose comme ça :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // SAVE the user
    if (Thread.GetNamedDataSlot("userid") == null)
    {
             Thread.AllocateNamedDataSlot("userid");
    }
    LocalDataStoreSlot data = Thread.GetNamedDataSlot("userid");
    Thread.SetData(data, Page.Items["UserId"]);
     
    // GET the user
    LocalDataStoreSlot data = Thread.GetNamedDataSlot("userid");
    String userid = (string)Thread.GetData(data);

    C'est mal ?

    Je ne peux pas utiliser ce que tu as mis car log4net est également géré via IoC. Donc il n'a pas accès à mon utilisateur directement (récupérer dans un module http)
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

Discussions similaires

  1. irrlicht : ne pas passer a travers les murs
    Par ryu sensei dans le forum Irrlicht
    Réponses: 1
    Dernier message: 02/05/2011, 15h29
  2. [DOM] Données "utilisateur" avec les evenements DOM
    Par pedouille dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/12/2005, 17h07
  3. Réponses: 6
    Dernier message: 04/05/2005, 18h39
  4. [typedef] protection à travers les espaces de noms
    Par PINGOUIN_GEANT dans le forum C++
    Réponses: 7
    Dernier message: 02/02/2005, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo