Class SecurityFilters<MESSAGE,​SCOPE>

  • Type Parameters:
    MESSAGE - Сообщение генерируемое фильтром
    SCOPE - Область проверяемых данных
    All Implemented Interfaces:
    SecurityFilter<MESSAGE,​SCOPE>

    public class SecurityFilters<MESSAGE,​SCOPE>
    extends Object
    implements SecurityFilter<MESSAGE,​SCOPE>
    Создание фильтров безопасности.

    Пример:

    import xyz.cofe.trambda.sec.SecurAccess;
    import xyz.cofe.trambda.sec.SecurityFilters;
    
     ...
     server = new TcpServer<IEnv>(
        ssocket,
        session -> new LinuxEnv(),
        // Задаем ряд фильтров которые проверяют на безопасный код
        // Фильтры проверяют байт-код на наличие определенных инструкций:
        // Вызов метода или чтение/изменение поля
        SecurityFilters.create(s -> {
            // Фильтры деляться на две группы: 
            //   allow() - разрешающие 
            //   и deny() - запрещающие
            // Каждая группа может указана несколько раз
            // Фильтры применяются в порядке их указания
            // Применяется первый совпавший фильтр
            s.allow( a -> { // Здесь задаются разрешающие вызовы
                // Проверяет вызов методов публичного сервиса
                a.invoke("demo api",              
                  c->c.getOwner()
                    .matches("xyz\\.cofe\\.trambda\\.tcp\\.demo\\.([\\w\\d]+)"));
    
                // Так же разрешено вызывать методы Java Collection
                a.invoke("java collections api", c->c.getOwner().matches(
                    "java\\.util\\.(List)|java\\.util\\.stream\\.([\\w\\d]+)"));
                    
                // Это разрешение на вызов методов класса String
                a.invoke("java lang api", c->c.getOwner().matches("java\\.lang\\.(String)"));
                
                // Это разрешение на вызов стандартных BootStrap методов, 
                // которые генериурует javaс
                a.invoke("java compiler", c->c.getOwner().matches("java\\.lang\\.invoke\\.(LambdaMetafactory|StringConcatFactory)"));
            });
            
            // Все остальные вызовы запрещены
            s.deny().any("by default");
        })
    );