Веб-приложение WSO2 - добавляем проверку прав доступа - Веб-приложение WSO2 - добавляем проверку прав доступа
Blogs
Сегодня мы продолжим рассматривать пример создания веб-приложения с использованием технологий WSO2, начатый некоторое время назад в этом посте: http://www.emdev.ru/-/primer-veb-prilozenia-s-primeneniem-tehnologij-wso2
Как и в прошлый раз - я взял за основу оригинальный код, по минимуму изменяя его. Все улучшения будут потом. Мимо одно я не смог только пройти (так как в свое время потратил на это очень много времени) - это то, как формируется имя ресурса в EntitlementFilter - но об этом чуть ниже.
WSO2 Identity Server
Как и в первой статье, для решение специфической задачи мы будем использовать специфический продукт в семействе WSO2: WSO2 Identity Server. Этот продукт отвечает за целый спектр задач, связанных как раз с аутентификацией и авторизацией пользователей.
Установка и старт WSO2IS происходят штатным для всех продуктов WSO2 способом. Только (в рамках нашего демо) необходимо изменить Offset в файле repository/conf/carbon.xml на 1 - что бы сервер не конфликтовал с другими серверами по портам. После этого WSO2IS будет доступен по адресу https://localhost:9444/carbon
Настройка пользователей и ролей
Первое, что необходимо сделать - это создать роли и пользователи, которыми будет оперировать наше приложение. Предположим у нас будет две роли - read - дает право на чтение записей о пациентах, и write - создавать новые записи.
Идем в Configure -> Users and Roles -> Roles -> Add New Role и добавляем роль read
Затем аналогично добавляем роль write
Теперь черед пользователей. Добавляем там же следующих пользователей с ролями согласно таблице
Username | Password | Roles |
evanthika | evanthika | read |
senaka | senaka | write |
shammi | shammi | internal/everyone |
Добавляем в приложение аутентификацию
Теперь мы можем добавить в наше приложение аутентификацию - вход в приложение по имени пользователя и паролю. Так как приложение у нас минимально использует какие либо framework-и (типа того же Spring Security) - то реализовывать будем по простому, своими силами, следующим образом
- Повешен AuthenticationFilter, который проверяет сессию (залогинен пользователь или нет) и если нет -то делает редирект на страницу login.html c формой логина.
- Фильтр добавляем в web.xml.
- После сабмита формы логина вызывается LoginServlet - в нем мы получаем переданные имя пользователя и пароль и делаем вызов сервиса RemoteUserStoreManagerService, предоставленного WSO2IS
- Для этого используется следующий код:
if (!(credential instanceof String)) { throw new Exception("Unsupported type of password"); } try { if(stub == null) { stub = new RemoteUserStoreManagerServiceStub(null, serverUrl + "RemoteUserStoreManagerService"); HttpTransportProperties.Authenticator basicAuth = new HttpTransportProperties.Authenticator(); basicAuth.setUsername(basicAuthUserID); basicAuth.setPassword(basicAuthPassword); basicAuth.setPreemptiveAuthentication(true); final Options clientOptions = stub._getServiceClient().getOptions(); clientOptions.setProperty(HTTPConstants.AUTHENTICATE, basicAuth); stub._getServiceClient().setOptions(clientOptions); } return stub.authenticate(userName, (String) credential); } catch (Exception e) { handleException(e.getMessage(), e); } return false;
- В pom.xml добавляем dependency, чтобы нам стал доступен указанный класс.
- При клике на кнопку Logout вызывается LogoutServlet, который просто инвалидирует сессию.
XACML
Загрузка правил XACML в WSO2IS
EntitlementFilter
- Дальше требуется только разместить фильтр в web.xml правильно указав урл и имя пользователя-пароль для доступа до нашего сервера WSO2IS в контекстных параметрах.
- А так же добавить зависимость в pom.xml ( и добавить наш репозиторий)
- 6.2 (12)
- 7.0 (12)
- activiti (14)
- apache camel (6)
- camel (11)
- devcon (6)
- devops (5)
- emdev (9)
- emdev limited (9)
- entaxy (13)
- esb (10)
- fuse (5)
- gartner (7)
- google apps (6)
- jboss (5)
- liferay (143)
- liferay 7.1 (11)
- liferay dxp (11)
- liferay7 (12)
- openshift (8)
- osgi (5)
- redhat (15)
- rest (6)
- wso2 (70)
- wso2 api-m (10)
- wso2 ei (8)
- wso2ei (5)
- wso2esb (7)
- wso2is (8)
- емдев (11)
Сайт использует файлы cookie. Они позволяют узнавать вас и получать информацию о вашем пользовательском опыте. Это нужно, чтобы улучшать сайт. Посещая страницы сайта и предоставляя свои данные, вы позволяете нам предоставлять их сторонним партнерам. Если вы согласны, продолжайте пользоваться сайтом. Если нет – установите специальные настройки в браузере или обратитесь в техподдержку.