Используйте lighttpd mod_auth. https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModAuth
server.modules += ("mod_auth")
auth.require = ( "" =>
(
"method" => "extern",
"realm" => "certificate",
"require" => "user=agent007|user=agent008"
)
)
Необходимо указать допустимые значения SSL_CLIENT_S_DN_CN в user=...|user=...
Различное поведение может быть получено с использованием разных служебных объектов. Статические методы в служебном классе нельзя заменить. Это чрезвычайно полезно для тестирования, изменения реализаций и других целей.
Например, вы упоминаете CryptoUtil
с методом encrypt
. Было бы чрезвычайно полезно иметь разные объекты, которые могли бы поддерживать разные стратегии шифрования, разных получателей сообщений и т. Д.
Вы не можете переопределить статический метод, что может стать огромной проблемой, если вы хотите реализовать свою службу двумя разными способами и переключаться между ними. По этой причине я бы ограничил использование статических служебных классов простыми вещами, которые «никогда» (для достаточно длинного значения «никогда» :)) не нужно делать более чем одним способом.
Я хочу реализовать ваш сервис двумя разными способами и переключаться между ними. По этой причине я бы ограничил использование статических служебных классов простыми вещами, которые «никогда» (для достаточно длинного значения «никогда» :)) не нужно делать более чем одним способом. Я хочу реализовать ваш сервис двумя разными способами и переключаться между ними. По этой причине я бы ограничил использование статических служебных классов простыми вещами, которые «никогда» (для достаточно длинного значения «никогда» :)) не нужно будет делать более чем одним способом.Разница в том, что классы обслуживания могут иметь состояние. И под состоянием я подразумеваю диалоговое состояние. Рассмотрим условную систему упорядочивания.
interface OrderSystem {
void login(String username, String password);
List<Item> search(String criteria);
void order(Item item);
void order(Item item, int quantity);
void update(Item item, int quantity);
void remove(Item item);
void checkout();
Map<Item, Integer> getCart();
void logout();
}
Это можно сделать с помощью сессионных компонентов с отслеживанием состояния (в качестве одного примера), хотя в этом случае аутентификация, вероятно, будет охватывать более традиционные механизмы EJB.
Дело в том, что существует диалоговый состояние в том, что результаты одного вызова влияют на последующие вызовы. Вы можете рассматривать статические методы как набор простых служб без сохранения состояния, которые выполняются локально.
Служба имеет гораздо более широкое значение, которое включает, но не ограничивается:
На мой взгляд, наилучшая практика - просто использовать статические методы в качестве удобных (особенно учитывая отсутствие в Java методов расширения). Услуги намного богаче.
Я думаю, что не существует жестких правил.
Я обычно использую статические методы для функций, требующих небольшого количества параметров и которые могут быть выполнены за один вызов метода. Пример:
Если функциональность требует много параметров и создается несколько связанных результатов, то более практично иметь класс, который может принимать общие параметры в своем конструкторе с несколькими методами, которые выполняют фактическое действие.
Типичный пример: соединение с базой данных, которое вы сначала подключаете, затем используете для выполнения запроса, а затем используете для получения результата ...
Я отвечал на этот вопрос где-то раньше, но я обнаружил, что очень легко изменить поведение службы - преобразовать ее в несколько служб - где требуется довольно существенный рефакторинг, если вы используете статический класс.
Если это единственное различие (а я считаю, что это так), тогда никогда не имеет смысла использовать статические классы.
Каждый раз, когда кто-то говорит: «Никогда и никогда не будет. должно быть больше 1 таких ", закодируйте n из них.