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

Java EE Discussion :

acces a un ejb 3 par un user et mot de passe


Sujet :

Java EE

  1. #1
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut acces a un ejb 3 par un user et mot de passe
    Bonjour

    j'ai un probléme dans l'accés a mon ejb, lorsque je veux acceder a cette ejb par user et mot de passe, dans le tutoriel ils ont signale que pour l'authentification ont utilise JAAS et c'est ce que j'ai fait mais j'ai pas reussi :
    voici mon code :
    le code de EJB est:
    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
    @RolesAllowed({"Admin"})
    public class TestBean implements TestRemote {
       @Resource SessionContext ctx;
        public TestBean() {
        }
        // AnyOne can call this method
       @PermitAll
        public int add(int a, int b) {
            return a+b;
        }
        // manager can only access to this method
       @RolesAllowed({"manager"})
        public int sous(int a, int b) {
            //TODO implement sous
            return 0;
        }
        // no one can call this method except the administrators
        public String callerRetourne() {
            return ctx.getCallerPrincipal().getName();
        }
        // no one can access to this method
       @DenyAll
        public int prod(int a, int b) {
          return a*b;
        }
    }
    mon code au niveau client est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Main {
       public Main() {
        }
       public static void main(String[] args) {
          // try{
           Subject sub=new Subject();
           LoginContext login=new LoginContext("test",sub,new CallBackHandler());
           login.login();
           Subject.doAs(sub,new Test());
           }   catch(LoginException e){
                 System.err.println("Erreur dans login Context"+e.getMessage());  
          }
        }
    }
    ModulePassword.JAVA le login module:
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    public class PasswordLoginModule implements LoginModule{
        private Subject subject;
        private String username;
        private char[] password={'i','n','f','o'}; 
        private CallbackHandler call;
        // Constructeur
        public PasswordLoginModule() {
        }
        // Initialiuse
        public void initialize(Subject sub,CallbackHandler call,Map sharedState,Map options){
            subject=sub;
            this.call=call;
        }
        // Login
        public boolean login() throws LoginException{
        /*    if(call==null){
                throw new LoginException("erreur dans le callbackhandler null");
            }
                Callback[] callback=new Callback[2];
                callback[0]=new NameCallback("userName s'il vous plait:");
                callback[1]=new PasswordCallback("Password :",false);        
           try{
                call.handle(callback);
                username=((NameCallback)callback[0]).getName();
                if(username==null){
                    throw new LoginException("username invalide");
                }
                char[] tmpPassword=((PasswordCallback)callback[1]).getPassword();
                if(tmpPassword==null){
                    tmpPassword=new char[0];
                }
                password=new char[tmpPassword.length];
                System.arraycopy(tmpPassword,0,password,0,tmpPassword.length);
                ((PasswordCallback)callback[1]).clearPassword();
                javax.swing.JOptionPane.showMessageDialog(null,"fin de login in???");
            }catch(IOException ioe){
                System.err.println("erreur dans le entrée sortie ="+ioe.getMessage());
            }catch(UnsupportedCallbackException e){
                System.err.println("erreur le support de callback ="+e.getMessage());
            }*/
           this.username="simo";
     
                return true;
        }
        // commit
        public boolean commit(){ //throws LoginException{
            javax.swing.JOptionPane.showMessageDialog(null,"username=???"+username);
            javax.swing.JOptionPane.showMessageDialog(null,"username=???"+password);
            PasswordCredential pass=new PasswordCredential(username,password);
            subject.getPrivateCredentials().add(pass);
            username=null;
            password=null;
            javax.swing.JOptionPane.showMessageDialog(null,"commit???");
            return true;
        }
        // Abort
        public boolean abort() throws LoginException{
            javax.swing.JOptionPane.showMessageDialog(null,"abort???");
            return true;
        }
        // logout
        public boolean logout() throws LoginException{
            username=null;
            password=null;
            return true;
        }
    }
    Le code de CallbackHandler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class CallBackHandler implements CallbackHandler{
        public CallBackHandler() {
        }
        public void handle(Callback[] call) {
            for(int i=0;i<call.length;i++){
                if(call[i] instanceof NameCallback){
                    NameCallback nc=(NameCallback)call[i];
                    String name="simo";//j'ai fixé le login
                    nc.setName(name);
                }else if(call[i] instanceof PasswordCallback){
                    PasswordCallback pc=(PasswordCallback)call[i];
                    String pass="info";
                    pc.setPassword(pass.toCharArray());
                }}}}
    la classe qui permet l'accés au ejb :
    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
    public class Test implements PrivilegedAction{
     
        @EJB
        private static TestRemote testBean;
     
        public Test() {
        }
        public Object run(){
            try{
                Context ctx=new InitialContext();
                javax.swing.JOptionPane.showMessageDialog(null,1); 
                Object obj=ctx.lookup(TestRemote.class.getName());
                javax.swing.JOptionPane.showMessageDialog(null,2); 
                testBean=(TestRemote)javax.rmi.PortableRemoteObject.narrow(obj,TestRemote.class);
                javax.swing.JOptionPane.showMessageDialog(null,"la somme 2+4="+testBean.add(2,4)+"//La caller est="+testBean.callerRetourne());
           }catch(NamingException e) {
               javax.swing.JOptionPane.showMessageDialog(null,"Vous n'avez le droit d'accerder a cette EJB"+e.getMessage());
           }
            return null;
        }
    }
    lors de l'execution, je recoit le message suivant :
    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
    6 août 2007 14:14:28 com.sun.enterprise.iiop.security.SecurityMechanismSelector getUsernameAndPassword
    GRAVE: IOP5023: Exception getting username and password
    java.lang.ClassCastException: javax.resource.spi.security.PasswordCredential cannot be cast to com.sun.enterprise.security.auth.login.PasswordCredential
            at com.sun.enterprise.iiop.security.SecurityMechanismSelector$2.run(SecurityMechanismSelector.java:877)
            at java.security.AccessController.doPrivileged(Native Method)
            at com.sun.enterprise.iiop.security.SecurityMechanismSelector.getUsernameAndPassword(SecurityMechanismSelector.java:875)
            at com.sun.enterprise.iiop.security.SecurityMechanismSelector.sendUsernameAndPassword(SecurityMechanismSelector.java:624)
            at com.sun.enterprise.iiop.security.SecurityMechanismSelector.getSecurityContextForAppClient(SecurityMechanismSelector.java:550)
            at com.sun.enterprise.iiop.security.SecurityMechanismSelector.selectSecurityContext(SecurityMechanismSelector.java:530)
            at com.sun.enterprise.iiop.security.SecurityServiceImpl.getSecurityContext(SecurityServiceImpl.java:102)
            at com.sun.enterprise.iiop.security.SecClientRequestInterceptor.send_request(SecClientRequestInterceptor.java:255)
            at com.sun.corba.ee.impl.interceptors.InterceptorInvoker.invokeClientInterceptorStartingPoint(InterceptorInvoker.java:227)
            at com.sun.corba.ee.impl.interceptors.PIHandlerImpl.invokeClientPIStartingPoint(PIHandlerImpl.java:322)
            at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:245)
            at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:156)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:153)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:119)
            at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:197)
            at com.sun.ejb.codegen._GenericEJBHome_Generated_DynamicStub.create(_GenericEJBHome_Generated_DynamicStub.java)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:342)
            at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(RemoteBusinessObjectFactory.java:61)
            at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
            at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:314)
            at javax.naming.InitialContext.lookup(InitialContext.java:392)
            at a.Test.run(Test.java:40)
            at java.security.AccessController.doPrivileged(Native Method)
            at javax.security.auth.Subject.doAs(Subject.java:337)
            at a.Main.main(Main.java:33)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at com.sun.enterprise.util.Utility.invokeApplicationMain(Utility.java:232)
            at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:329)
            at com.sun.enterprise.appclient.Main.main(Main.java:180)

  2. #2
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    est ce que je peux trouver des exemples d'utilisations de JAAS et EJB 3 dans un site d'internet ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/08/2013, 10h06
  2. [MySQL] Accés à une page via user et mot de passe
    Par argon dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/06/2009, 19h56
  3. Réponses: 9
    Dernier message: 20/04/2009, 20h40
  4. trigger user change mot de passe
    Par amarige dans le forum Développement
    Réponses: 1
    Dernier message: 25/06/2008, 12h24
  5. comment recuperer la session (user et mot de passe) de windows?
    Par mbouzouita dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 29/01/2007, 10h54

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