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

Spring Java Discussion :

Activer spring security sur les EJBs


Sujet :

Spring Java

  1. #1
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut Activer spring security sur les EJBs
    Bonjour,

    j'ai une application avec Spring security + EJB avec annotation @RolesAllowed

    Partant de là, j'ai deux possibilité:

    1) fait l'authentification par JBoss et la propager vers spring security: ok mais limité dans ce que l'on peux faire lors du login et le support sur la sécurité des urls. C'est ce qu'on fait pour les webservice, mais je voudrait éviter d'avoir à le faire aussi pour le browser
    2) ce que je cherche à faire: avoir Spring Security qui intercepte les appels EJBs sur les méthode annotées avec @RolesAllowed
    Pour ce point 2, je suis un peu perdu et j'ai du mal à voir ce qu'il faut que je configure.
    J'ai trouvé SpringBeanAutowiringInterceptor qui permet d'injecter les autowired dans le EJB, mais rien pour la securité :/

    A moins que je ne me fournvoie et que ce soit censé marcher out of the box?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    un spring-security-context.xml que vous inclurez dans le context principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:security="http://www.springframework.org/schema/security"
     
    ...
     
        <security:authentication-manager alias="authenticationManager">
            <security:authentication-provider ref="preauthAuthProvider" />
        </security:authentication-manager>
     
        <security:http …>
            ...
        </security:http>
     
     
     
        <bean id="securityMetadataSource" class="org.springframework.security.access.annotation.SecuredAnnotationSecurityMetadataSource" />
     
     
        <security:global-method-security secured-annotations="enabled" access-decision-manager-ref="accessDecisionManager" />
     
     
     
     
        <bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
            <constructor-arg>
                <list>
                    <ref bean="roleVoter" />
                </list>
            </constructor-arg>
        </bean>
     
     
        <bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter">
            <property name="rolePrefix" value="__YOURS___" />
        </bean>
     
     
     
        <bean id="jeePreAuthenticatedFilter" class="org.springframework.security.web.authentication.preauth.j2ee.J2eePreAuthenticatedProcessingFilter">
            <property name="authenticationManager" ref="authenticationManager" />
            <property name="continueFilterChainOnUnsuccessfulAuthentication" value="false" />
        </bean>
     
        <bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
            <property name="preAuthenticatedUserDetailsService">
                <bean id="userDetailsServiceWrapper" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
                    <property name="userDetailsService" ref="authRepository" />
                </bean>
            </property>
        </bean>
     
    </beans>
    authRepository sera défini ailleurs (par exemple une classe @Repository("authRepository"))
    et vous aurez sans doute besoin de 2 versions : déploiement et JUnit…

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    je vais vérifier par rapport à ce qu'on à déjà dès ce soir. En attendant, tu peux m'expliquer là dedans quelle est la partie qui active les check sur les EJB? On a déjà une config qui check sans problème le http, le problème c'est que EJB ne vois pas cette authentification et le conteneur en conclu "crotte, pas de contexte, permit all alors"

    Pour les junit, pas de soucis, c'est déjà actif par conteneur EJB + arquillian, pas de spring.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    je vais vérifier par rapport à ce qu'on à déjà dès ce soir. En attendant, tu peux m'expliquer là dedans quelle est la partie qui active les check sur les EJB? On a déjà une config qui check sans problème le http, le problème c'est que EJB ne vois pas cette authentification et le conteneur en conclu "crotte, pas de contexte, permit all alors"

    Pour les junit, pas de soucis, c'est déjà actif par conteneur EJB + arquillian, pas de spring.
    juste çà c'était pour du Spring pur, pour les EJB il faut encore activer mode="aspectj"dans global-method-security et weaver avec spring-security-aspects.jar

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le truc c'est que je voudrait éviter de weaver. Si je dois weaver on ira plutôt vers du full jee pour l'authentification plutôt que spring. J'espérais qu'il pourraist juste forwarder le contexte d'authentification à jboss pour qu'il gère la sécurité.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Le truc c'est que je voudrait éviter de weaver. Si je dois weaver on ira plutôt vers du full jee pour l'authentification plutôt que spring. J'espérais qu'il pourraist juste forwarder le contexte d'authentification à jboss pour qu'il gère la sécurité.
    les beans EJB ne sont pas connues de Spring donc il faut les weaver pour utiliser Spring security.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ben oui ce que voudrait c'est que spring exporte les rôles que le conteneur se charge de la sécurité ejb comme il le fait bien...

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ben oui ce que voudrait c'est que spring exporte les rôles que le conteneur se charge de la sécurité ejb comme il le fait bien...
    Spring a un mécanisme de publication d'évènements que vous pouvez écouter via "implements ApplicationListener " lors d'une authentication vous aurez un "InteractiveAuthenticationSuccessEvent", vous pourriez alors propager au container les infos nécessaires.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ça résoud pas mon shmilblik: comment passer ça au conteneur

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ça résoud pas mon shmilblik: comment passer ça au conteneur
    … des API spécifiques à chaque container…
    pour JBoss : SecurityContextAssociation ?



Discussions similaires

  1. [EJB3] Cours sur les EJB 3, mise en oeuve avec JBoss AS 4
    Par mmathieu dans le forum Java EE
    Réponses: 0
    Dernier message: 27/08/2009, 14h22
  2. [EJB3] Cours sur les EJB 3.0
    Par paolo2002 dans le forum Java EE
    Réponses: 1
    Dernier message: 15/10/2007, 11h30
  3. [EJB] Recherche livres sur les EJB..
    Par gelinp dans le forum Java EE
    Réponses: 1
    Dernier message: 19/04/2007, 15h11
  4. [EJB] [debutant] Question théorique simple sur les ejb
    Par Sylario dans le forum Java EE
    Réponses: 4
    Dernier message: 13/09/2006, 22h16
  5. [EJB] Généralités sur les EJB Entity
    Par drKzs dans le forum Java EE
    Réponses: 2
    Dernier message: 07/04/2006, 12h15

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