Как реализовать Security в Java EE? Часть 2 – Devcolibri

Как реализовать Security в Java EE? Часть 2

В данном уроке мы рассмотрим как реализовать безопасность в приложениях используя БД.

Введение

В прошлом уроке, Как реализовать Security в Java EE? Часть 1, мы рассматривали простой способ настройки безопасности для приложения. Он будет отталкиваться от предыдущего и строиться на нем. В сегодняшнем уроке мы сделаем настройку безопасности используя БД. Также, нам понадобиться настроенный datasource. Это не тяжело сделать и настраивается очень быстро.

Шаг 1. Создание и привязка к datasource

Теперь нам нужно создать источник данных для нашего приложения и сервера. Раньше, просто работая с JPA мы хранили эту информацию внутри приложения, сейчас нам нужно вынести все это на сервер. Чтобы не создавать большой урок, детально об этом написано здесь WildFly настройка и использование DataSource в JPA. В данном уроке, настройте только источник, создавать сущности и persistence не обязательно.

Шаг 2. Настройка домена

После настройки источника, нужно настроить домен, для нашего приложения. Опять же, в прошлом мы использовали домен other. Здесь создадим свой конкретно для приложения и базы.

Внимание! Перед этими изменениями остановите сервер. Иначе он может перетереть ваши настройки.

Открываем файлик в WildFly который находиться по пути: standalone/configuration/standalone.xml Там ищем тег security-domains  и внутрь него добавляем свой доммен.

<security-domain name="securityexampledomain" cache-type="default">
    <authentication>
        <login-module code="Database" flag="required">
            <module-option name="dsJndiName" value="java:jboss/datasources/DataSourceEx"/>
            <module-option name="principalsQuery" value="SELECT password FROM accounts WHERE login=?"/>
            <module-option name="rolesQuery" value="SELECT role, 'Roles' FROM accounts WHERE login=?"/>
        </login-module>
    </authentication>
</security-domain>

После чего вносим изменения в jboss-web.xml

<jboss-web>
    <security-domain>java:/jaas/securityexampledomain</security-domain>
</jboss-web>

сохраняем и перезагружаем сервер.

Шаг 3. Создание записей в базе

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

INSERT INTO accounts VALUES (1, 'manager', 'manager', 'MANAGER');
INSERT INTO accounts VALUES (2, 'admin', 'admin', 'ADMIN');
INSERT INTO accounts VALUES (3, 'user', 'user', 'USER');

Шаг 4. Проверка работы безопасности

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

@WebServlet(urlPatterns = "/servlet2")
@ServletSecurity(httpMethodConstraints = {
        @HttpMethodConstraint(value = "GET", rolesAllowed = "MANAGER"),
        @HttpMethodConstraint(value = "POST", rolesAllowed = "MANAGER")
})
public class SecuredServlet2 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
                                                 throws ServletException, IOException {
       //body.....
    }
}

После чего вы увидите сообщение успешного доступа к защищенному контенту.

You are on secured page!

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

26890
12/07/2014

9 комментариев к статье "Как реализовать Security в Java EE? Часть 2"

  1. Подскажите насколько актуально использовать реализацию с помощью сервера приложений? Тут больше интересует как бы корпоративный опыт… К примеру такая тонкость: при обновлении или смены сервера, все данные настройки естествено будут утерянными. Или к примеру новый человек на проэкте, он счекаутил проэкт и ему еще требуется должным образом настроить сервер?

    • Это безопасно, так как не разработчик отвечает за данные пользоватлей, а человек который администрирует сервер. Но тут две стороны есть плюсы есть минусы.

      • Вот у меня и вызывают сомнения то, что я со стороны разработки лезу в поле работы системного администратора… Спасибо за ответ, я как бы вижу и плюсы и минусы, меня больше интересовало используют ли такое решение в коммерции…

  2. А как реализовать авторизацию и аутентификация, если пользователи хранятся в базе ActiveDirectory?

  3. Александр, было бы классно указать про возможность хеширования пароля, а то хранить пароль в не зашифрованном виде в базе не комильфо.

  4. Не получается за пустить. пишет ошибка
    13:39:47,749 ERROR [org.jboss.as.controller.management-operation] (XNIO-1 task-10) JBAS014613: Operation (“test-connection-in-pool”) failed – address: ([
    (“subsystem” => “datasources”),
    (“data-source” => “DataSourceEx”)
    ]) – failure description: “JBAS010440: failed to invoke operation: JBAS010442: failed to match pool. Check JndiName: java:jboss/datasources/DataSourceEx”

  5. Здравствуйте.
    Актуальный вопрос с предыдущей части: как сделать logout ?

  6. Статья полный бред. Наплевательсоке отношение к пользователям. У вас нет картинок по которым можно добавить data source. у вас неправильно указано JNDI имя для источника данных. И еще много много факторов из -за которых пример не будет работать. На вопросы пользователей (logout ) здесь не отвечают.
    Ни кому не советую идти на курсы данного ресурса ибо результат на лицо

    • Добрый день. Мы отвечаем на вопросы по мере возможности, сейчас мы не успеваем отвечать на все вопросы в блоге. Комментарии в блоге сделаны для того, чтобы пользователи помогали друг другу, чтобы наше вмешательство было минимально.

      Про курсы вы зря делаете такой вывод – там мы гарантируем качество материала и отвечаем быстро в случае возникновения каких-то сложностей .

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)