2015-05-06 7 views
1

Я могу подключиться к LDAP-серверу и аутентифицировать пользователя. Я также использую файл политики, который выглядит следующим образом:Как предоставить разрешение пользователя в политике?

grant codeBase "file:/C:/Codebase/-", 
principal java.security.Principal "john" { 
    permission java.util.PropertyPermission "user.home", "read"; 
    permission java.util.PropertyPermission "java.home", "read"; 
    permission javax.security.auth.AuthPermission "createLoginContext.TestLdap"; 
}; 

Если удалить строку principal java.security.Principal "john", она отлично работает. Но когда я указываю Принципала, он перестает работать, бросая AccessControlException (даже я зарегистрировался как «john»). Я хочу предоставить некоторые пользовательские привилегии, такие как предоставление администратору чтения и записи файлов. Почему это не работает?

Я пытаюсь не использовать сертификат, потому что я не хочу, чтобы пользователь взаимодействовал с чем угодно.

ответ

0

Я узнал, что я вышел из кода Java (забыл удалить эту часть теста) перед чтением личной информации. Кроме того, в приведенном выше коде есть еще одна ошибка. Это должно было быть так:

grant codeBase "file:/C:/Codebase/-" { 
    permission javax.security.auth.AuthPermission "doAsPrivileged"; 
    permission javax.security.auth.AuthPermission "createLoginContext.TestLdap"; 
}; 

grant codeBase "file:/C:/Deveop/Codebase2/-", 
principal com.sun.security.auth.UserPrincipal "john" { 
    permission java.util.PropertyPermission "user.home", "read"; 
    permission java.util.PropertyPermission "java.home", "read"; 

}; 

Кроме того, убедитесь, что вы звоните Subject.doAsPrivileged(Subject subject, PrivilegedAction<Object> action, null) и реализовать PrivilegedAction как класс действий.