User Tools

Site Tools


java_security

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
java_security [2007/02/09 11:50] slonopotamusjava_security [2007/02/09 12:24] slonopotamus
Line 12: Line 12:
 ==== Зачем защищать ==== ==== Зачем защищать ====
 Чтобы разделять, кому что можно, а кому что нельзя делать. Чтобы разделять, кому что можно, а кому что нельзя делать.
 +
  
 ===== Аутентификация ===== ===== Аутентификация =====
-FIXME+==== Несортированный трэш ==== 
 +<code java> 
 +    //Authorization init 
 +    Policy.setPolicy(new Policy() 
 +    { 
 +      public boolean implies(final ProtectionDomain domain, final Permission permission) 
 +      { 
 +        for (final Principal principal : domain.getPrincipals()) { 
 +          if (principal instanceof MyPrincipal) { 
 +            //получить откуда-то коллекцию прав принципала и вызвать для них implies, передав в качестве аргумента проверяемый пермишен. 
 +          } 
 +        } 
 +        return false; 
 +      } 
 +    }); 
 +    //Authentication init 
 +    final Configuration orig = Configuration.getConfiguration(); 
 +    Configuration.setConfiguration(new Configuration() 
 +    { 
 +      public AppConfigurationEntry[] getAppConfigurationEntry(final String name) 
 +      { 
 +        return (name.equals("MY_APP")) ? 
 +            new AppConfigurationEntry[]{ 
 +                new AppConfigurationEntry( 
 +                    "com.myApp.security.MyLoginModule", //наша реализация LoginModule. 
 +                    AppConfigurationEntry.LoginModuleControlFlag.REQUISITE, 
 +                    Collections.<String, Object>emptyMap() 
 +                ) 
 +            } : orig.getAppConfigurationEntry(name); 
 +      } 
 + 
 +      public void refresh() 
 +      { 
 +        orig.refresh(); 
 +      } 
 +    }); 
 +    System.setSecurityManager(new SecurityManager()); 
 +    //Аутентификация 
 +    final String name = "login"; 
 +    final String password = "password"; 
 +    final LoginContext ctx = new LoginContext("MY_APP", new CallbackHandler() 
 +    { 
 +      public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException 
 +      { 
 +        for (final Callback cb : callbacks) 
 +        { 
 +          if (cb instanceof NameCallback) 
 +          { 
 +            ((NameCallback) cb).setName(name); 
 +          } 
 +          else if (cb instanceof PasswordCallback) 
 +          { 
 +            ((PasswordCallback) cb).setPassword(password.toCharArray()); 
 +          } 
 +          else 
 +          { 
 +            throw new UnsupportedCallbackException(cb); 
 +          } 
 +        } 
 +      } 
 +    }); 
 +    ctx.login(); 
 +    //выполнение кода в контексте аутентифицированного пользователя 
 +    Subject.doAs(ctx.getSubject(), new PrivilegedAction<Object>() 
 +    { 
 +      public Object run() 
 +      { 
 +        //Do something 
 +        return null; 
 +      } 
 +    }); 
 +    ctx.logout(); 
 +</code>
  
 ===== Авторизация ===== ===== Авторизация =====
Line 175: Line 248:
 ===== Permissions Evangelizm ===== ===== Permissions Evangelizm =====
 FIXME FIXME
 +
 +====== JAAS vs Acegi Security ======
 +
 +===== Java Security (JAAS) =====
 +{{jsf-ru:plus.gif}} Является стандартом, поддерживается большим количеством технологий (EJB, Servlets, etc)
 +
 +{{jsf-ru:plus.gif}} Простой API
 +
 +{{jsf-ru:plus.gif}} Хорошо документирован
 +
 +{{jsf-ru:minus.gif}} Довольно скудная базовая функциональность
 +
 +{{jsf-ru:minus.gif}} Ограниченное встроенное кэширование (не предполагает изменения набора прав в процессе работы приложения), в случае отключения которого необходимо реализовывать кэширование на уровне приложения
 +
 +{{jsf-ru:minus.gif}} Отсутствуют теги для проверки прав к различным элементам интерфейса (однако возможно их написание)
 +
 +{{jsf-ru:minus.gif}} Политики принятия решений необходимо реализовывать вручную
 +
 +{{jsf-ru:minus.gif}} В некоторых случаях контейнеро-зависим (однако возможно написание контейнеро-независимого кода)
 +
 +
 +===== Acegi Security =====
 +
 +{{jsf-ru:plus.gif}} Хорошо документирован
 +
 +{{jsf-ru:plus.gif}} Простая интеграция со Spring
 +
 +{{jsf-ru:plus.gif}} Встроенные аудиты
 +
 +{{jsf-ru:plus.gif}} Встроенные интерцепторы (например, для удаления из коллекций недоступных объектов)
 +
 +{{jsf-ru:plus.gif}} Различные политики принятия решений (если все полиси разрешают, если хоть одна полиси разрешает, на основе голосования и очков)
 +
 +{{jsf-ru:plus.gif}} Встроенные теги для проверки прав к различным элементам интерфейса (правда примитивные)
 +
 +{{jsf-ru:plus.gif}} Встроенное кэширование
 +
 +{{jsf-ru:plus.gif}} Контейнеро-независим
 +
 +{{jsf-ru:plus.gif}} Встроенная поддержка опции «запомнить меня»
 +
 +{{jsf-ru:minus.gif}} Многократно более сложный API
 +
 +{{jsf-ru:minus.gif}} Не специфицирован
 +
 +При этом следует учитывать, что имеется возможность оборачивать использование сторонним кодом JAAS’а в обращения к Acegi и наоборот. Так же необходимо понимать, что права виртуальной машины (доступ к файлам, сокетам, работа с класслоадерами и т.д. проверяются через JAAS, поэтому при использовании Acegi в любом случае будет необходимо направлять в него обращения к JAAS).
java_security.txt · Last modified: 2019/06/12 16:08 by 127.0.0.1