Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SecurityManager] AccessControlContext

problème de gestion des droits

    14 octobre 2011 à 21:30:38

    Bonjour,

    rencontrant un petit problème je me permets de venir vers vous. Je souhaite créer et gérer les habilitations de mon programme au runtime mais j'ai un petit problème. Voici un exemple de code.
    grant {
      permission javax.security.auth.AuthPermission "doAsPrivileged";
    };


    import sun.applet.Main;
    
    import javax.security.auth.AuthPermission;
    import javax.security.auth.Subject;
    import java.security.*;
    import java.security.cert.Certificate;
    import java.util.HashSet;
    
    public class Startup {
    
        public static void main(String[] args) {
            System.setSecurityManager(new SecurityManager());
    
            HashSet<Principal> principals = new HashSet<>();
            HashSet o = new HashSet();
            principals.add(new MyPrincipal());
            Subject subject = new Subject(true, principals, o, o);
    
            HashSet<Principal> principals2 = new HashSet<>();
            Subject subject2 = new Subject(true, principals2, o, o);
    
            try {
                Subject.doAsPrivileged(subject, getPrivilegedAction(),
                                       getAccessControlContext());
            } catch (Exception ex) {
                System.out.println("ex pour user A = " + ex);
            }
    
            try {
                Subject.doAsPrivileged(subject2, getPrivilegedAction(),
                                       getAccessControlContext());
            } catch (Exception ex) {
                System.out.println("ex pour user B = " + ex);
            }
    
        }
    
        private static AccessControlContext getAccessControlContext() {
            return new AccessControlContext(new ProtectionDomain[]{getProtectionDomain()});
        }
    
        private static ProtectionDomain getProtectionDomain() {
            return new ProtectionDomain(getCodeSource(), getPermission(),
                                        Startup.class.getClassLoader(),
                                        new Principal[]{new MyPrincipal()});
        }
    
        private static PermissionCollection getPermission() {
            Permissions permissions = new Permissions();
            permissions.add(new AuthPermission("getenv.os.home"));
            return permissions;
        }
    
        private static CodeSource getCodeSource() {
            return new CodeSource(null, (Certificate[]) null);
        }
    
        private static PrivilegedAction<Object> getPrivilegedAction() {
            return new PrivilegedAction<Object>() {
                @Override
                public Object run() {
                    return System.getenv("os.home");
                }
            };
        }
    
    
    }
    
    class MyPrincipal implements Principal {
    
    
        @Override
        public String getName() {
            return "Azerty";
        }
    
    }
    


    Dans cette exemple j'accorde au deux Subject la droit de lire la variable d'environnement. Cependant il n'y arrive pas. Pourquoi ? Ne peut-on pas créer un AccessControler pour gérer les habilitations ? ou dois-je déclarer ces habilitations dans mon fichier .policy aussi ?

    Si oui qu'elle est la différence entre le fichier .policy et un AccessControleContext ?

    Merci
    • Partager sur Facebook
    • Partager sur Twitter

    [SecurityManager] AccessControlContext

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown