Archive for the ‘Java’ Category

Spring custom web argument resolver

Posted on: September 7th, 2012 by Spade No Comments »

Одна из любимых всеми и крайне удобных возможностей Spring MVC – это механизм data binding. Мы можем выполнить привязку наших объектов к параметрам запроса, хэдерам, кукам и т.д. Иногда, однако, может возникнуть потребность создать собственную привязку, которой по умолчанию в спринге нет. Мы можем с легкостью расширить функциональность data binding своей собственной логикой. (more…)

Spring MVC interceptors

Posted on: August 3rd, 2012 by Spade No Comments »

Иногда нужно добавить некоторую общую логику для всех обработчиков запросов. Например, проверка авторизован ли пользователь, какой он имеет набор прав, есть ли у него доступ к этой странице. Можно так же пускать пользователей на определенные ресурсы только в определенные часы. Для подобного рода задач spring framework предоставляет возможность написания своих «плагинов» – interceptor-ов. Каждый раз, когда начинается процесс разбора УРЛ, выбора обработчика (класса контроллера), вызова его функций и т.д. фреймворк смотрит не определен ли пользователем дополнительный обработчик для текущей стадии, если да – он будет вызван.

(more…)

Spring security 3 custom password encoder

Posted on: July 19th, 2012 by Spade No Comments »

Популярный фреймворк Spring security 3 всем хорош, и прежде всего с двух сторон: там есть почти все что нужно, причем по умолчанию. А если нет – можно очень легко добавить или расширить.

Для случая аутентификации, например есть много вариантов работы с паролями. Это реализуется с помощью тэга password-encoder:

    <authentication-manager>
        <authentication-provider user-service-ref="userDetailsServiceImpl">
            <password-encoder hash="md5"/>
        </authentication-provider>
    </authentication-manager>

Там можно указать тип хэша, который хранится в базе. На выбор есть md5, sha, plaintext и др. (если вы храните пароли в базе в плейн тексте, просим вас оставаться на месте – служба зачистки уже выехала за вами). В последнее время участились случаи «увода» базы хэшей и их расшифровки (даже среди крупных игроков ИТ-рынка), и потому заказчики стали обращать больше внимания на то, как хранятся данные пользователей, и насколько легко получить вход в аккаунт, если хэш пароля стал известен. Алгоритмы предлагаемые Spring security 3 по умолчанию нельзя назвать особо защищенными, но сам фреймворк нам как-бы говорит – «Не нравится? Пиши своё». Воспользуемся его предложением.
(more…)

Angular всегда прав

Posted on: April 4th, 2012 by Spade No Comments »

Одно из наиболее интересных веяний в области разработки вэб-приложений на данный момент это изменение архитектуры MVC на стороне сервера в форму Services – Controllers на стороне сервера + MVC на стороне клиента. Суть в том, что сервер более никак не влияет на представление на стороне клиента. Все что от него требуется, это отдать данные в некотором виде (JSON, и уже реже, XML) – то есть сформировать модель для архитектуры Client side MVC, первый её уровень. Это дает ряд преимуществ. Самое смешное и часто повторяемое – что дизайнерам наконец-то будет удобнее писать разметку HTML, хотя мы то знаем что как бы далеко не зашли в своей простоте техноголии верстки, дизайнерам это мало поможет – хорошо если они когда-нибудь  научатся хотя  бы правильно оформлять файлы Photoshop.
(more…)

Custom Ant Task

Posted on: February 29th, 2012 by Spade No Comments »

А что если при сборке приложения вам нужно дождаться выполнения определенного условия – например некоторого флага из базы данных или ответа REST-сервиса? Для этих случаев сборщик Apache Ant предлагает специальный тэг waitfor – он дает возможность приостановить выполнения скрипта до момента наличия некоторого условия. Есть возможность установить сколько ждать, и как часть проверять это условие. Внутри него можно поместить дочерний тэг, который возвращает булево значение. Класс такого тэга должен реализовывать интерфейс org.apache.tools.ant.taskdefs.condition.Condition, главная функция которого – public boolean eval().
(more…)