Доступ к пространственным данным должен осуществляться после авторизации пользователя. Oracle Mapviewer как составная часть платформы Oracle Application Server предоставляет возможность интеграции системы аутенфикации.
Благодаря этому возможно:
1. Аутенфицировать пользователя на доступ к пространственным данным в Mapviewer
2. Авторизовать пользователя только на доступ к ограниченному объему данных в зависимости от привилегий.
Инструкция.
1. Инсталлируем базу данных Oracle, заливаем тестовую схему MVDEMO
2. Инсталлируем OC4J
3. Инсталлируем Mapviewer
4. Настраиваем аутенфикацию через SSO
4.1 Создаем пользователей через EM или через пакет jazn.jar, добавляем пользователей в роль users:
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com max max
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com george george
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com stacy stacy
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com alex alex
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com max
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com george
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com stacy
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com alex
4.2 Далее для простоты введем поле account_mgr и в него поместим имя менеджера для этого клиента. Разбиваем по фамилии клиента: если с буквы A и до G, то менеджер alex, с G и до M - george, и т.д.
alter table customers add (account_mgr varchar2(64));
update customers set account_mgr='alex' where substr(name,1,1)>='A' and substr(name,1,1) <'G'; update customers set account_mgr='george' where substr(name,1,1)>='G' and substr(name,1,1) <'M'; update customers set account_mgr='max' where substr(name,1,1)>='M' and substr(name,1,1) <'S'; update customers set account_mgr='stacy' where substr(name,1,1)>='S';
4.3 Создаем пакет, который в обязательно порядке имеет процедуру SET_USER и CLEAR_USER. При каждом обращении будет вызываться процедура SET_USER, а по завершению запроса CLEAR_USER. Пакет запоминает имя пользователя. Это имя в дальнейшем будет использовано для ограничения видимости клиентов.
CREATE OR REPLACE PACKAGE web_user_info
AS
PROCEDURE set_user (p_name IN VARCHAR2);
PROCEDURE clear_user;
FUNCTION get_user
RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY web_user_info
AS
w_name VARCHAR2 (32767);
PROCEDURE set_user (p_name IN VARCHAR2)
AS
BEGIN
w_name := LOWER (p_name);
END;
PROCEDURE clear_user
AS
BEGIN
w_name := null;
END;
FUNCTION get_user
RETURN VARCHAR2
AS
BEGIN
RETURN w_name;
END;
END;
/
4.4 Создаем представление, которое будет отбирать данные по имени пользователя.
CREATE OR REPLACE VIEW customers_view
AS
SELECT * FROM customers
WHERE account_mgr = web_user_info.get_user;
4.5 Записываем метаданные для созданного представления (представление будет не видно в MapBuilder, поэтому создаем метаданные вручную)
insert into user_sdo_geom_metadata
select 'CUSTOMERS_VIEW', column_name, diminfo, srid
from user_sdo_geom_metadata where table_name='CUSTOMERS';
insert into user_sdo_themes values('MYCUSTOMERS',NULL,'CUSTOMERS_VIEW','LOCATION',
'
4.6 Также необходимо добавить новый безопасный источник данных. Делается это в файле
$OC4J_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\conf\mapViewerConfig.xml. После изменения необходимо перегрузить OC4J.
Источник данных должен выглядеть примерное вот так
4.7 Возьмем теперь один из примеров Oracle Maps приложения (пусть будет $OC4J_HOME\j2ee\home\applications\mapviewer\web\fsmc\tutorial\samples\themeBasedFOIVisible.html). Переименуем в themeBasedFOIVisibleSec.html. Отредактируем строчку
var themebasedfoi2 = new MVThemeBasedFOI('themebasedfoi2','mvdemo.customers');
чтобы было вот так
var themebasedfoi2 = new MVThemeBasedFOI('themebasedfoi2','mvdemo_sec.mycustomers');
4.8 Теперь необходимо прописать, что при доступе к этой странице должна осуществляться аутенфикация пользователя. Делается это в файле
$OC4J_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\web.xml
Добавляем сразу за
наш страницу
4.9 Перезапускаем OC4J и заходим по адресу
http://server:8888/mapviewer/fsmc/tutorial/samples/themeBasedFOIVisibleSec.html
4.10 На экран будет попадать только информация о заказчиках, вошедшего в систему пользователя.
Комментариев нет:
Отправить комментарий