2016-02-04 2 views
1

Есть ли плагин maven, который дает mvn verifyaggregating project, если его подмодули или их транзитные зависимости зависят от того, что они не должны.Есть ли плагин maven, который увеличивает контроль доступа Java?

Я хотел бы иметь возможность ограничить использование публичного API, чтобы выразить политику как

  1. Только классы или пакеты на белом списке может вызвать этот публичный конструктор/метод.
  2. Этот публичный сеттер, созданный генератором кода, не должен называться - он должен быть действительно закрытым пакетом.

Мотивация & Предостережения

Я понимаю, что есть способы обойти эти требования с помощью отражения и десериализации. Моя конечная цель, чтобы системно-архитекторам & технически ведет установить политику как

  1. Все виды использования API, критических для безопасности должны быть в модулях проанализированных безопасности. Свяжитесь с ними, если вам нужен белый список.
  2. Эти устаревшие API запрещены в пользу новых. Есть белый список для grandfathered кода, который должен сокращаться с течением времени.

Системный архитектор рассматривает доверенных разработчиков приложений, но мы хотим, чтобы наивные нарушения правил помечены полезными сообщениями об ошибках, и мы хотим, чтобы разработчики, которые взломали политику, не могли правдоподобно отрицать, что они это сделали.

Трюки, такие как отражение и десериализация, попадают в этот неправдоподобный-допустимый взлом.


Это вроде как некоторые из целей Jigsaw, где модуль (группа пакетов) может заявить, что открытый интерфейс ограничивается только некоторые пакеты, но головоломки не получили широкого распространения.

Этот вопрос отличается от "Make Java methods visible to only specific classes", потому что я не спрашиваю о том, как это сделать на языке Java.

+1

Разве это не то, что обзоры кода и 'Геррит? – Shark

+1

@Shark, В крупных проектах команды должны специализироваться.Специалистам по безопасности необходимо работать над тем, чтобы обеспечить безопасность объектов, дизайнерам необходимо работать над дизайном, администраторы db должны убедиться, что база данных используется эффективно, а разработчикам приложений необходимо убедиться в том, что бизнес-логика реализована должным образом. Если каждое изменение, которое разработчик приложения разработало, должно было быть рассмотрено специалистами любого типа, развитие остановится. Разработчики приложений не должны быть экспертами по всем специальностям, прежде чем они смогут сделать обзор работы другого приложения. –

+0

Многое соглашалось, что обычно приводит к тому, что руководители команд вообще не кодируют и только управляют своей командой и делегируют задачи соответствующим людям/подчиненным/партнерам:/Но это всегда стоимость последующих политик, не так ли. – Shark

ответ

3

Вы можете использовать Checkstyle для выполнения таких проверок, для случая использования вы можете использовать import control:

Кажется, что это не поддерживает полностью квалифицированный импорт, основываясь на следующих ответы:

Checkstyle rule to limit interactions between root packages (with ImportControl?)

How to prevent fully qualified names in Java code

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

Что касается JSP, они обычно скомпилированы в контейнере сервлетов, тем не менее есть способ предварительно их скомпилировать, используя maven plugin.

+0

Спасибо за указатель. Это выглядит великолепно. Знаете ли вы, что: * контроль импорта * смотрит за пределы литералов 'import ...;' деклараций при использовании полностью квалифицированных имен классов и при использовании классов в сгенерированном коде, например, в Java-источниках, генерируемых из JSP-файлов? –

+1

Существуют и другие ответы SO, в которых утверждается, что имена квалифицированных классов не проверены - http://stackoverflow.com/questions/16142898/checkstyle-rule-to-limit-interactions-between-root-packages-with-importcontrol JSP обычно компилируются на сервере, поэтому по умолчанию они не будут проверяться. –

+0

Хороший вопрос о JSP. Я забыл о компиляции JIT для JSP. Это может быть одной из многих причин, по которым Jigsaw выбрала магию классов. –