Alfresco + BIRT. Необходим опыт интеграции.

 Всем привет. 
Ситуация такая: 
Есть BIRT (www.eclipse.org/birt/phoenix/), проще говоря - веб приложение, для работы с отчетами, в данном случае необходим только просмотр. Есть всем известная Alfresco, в которой присутствуют все необходимые пользователи.
Необходимо сделать возможность проверки пользователя из BIRT (напр.: текущий авторизованный пользователь, уровень доступа к запрошенному файлу отчета).
Пытался решить задачу следующим способом:
Расшарил все библиотеки и классы "/alfresco" в Tomcat, а именно: перенес из WEB-INF папки lib и classes в соответствующие папки Tomcat. Таким образом у нас есть возможность использовать Alfresco Java API в другом веб приложении, а именно в BIRT.
Для того, чтобы из BIRT получить доступ к Alfresco необходимо получить нужный контекст servlet'а, делал это таким образом: 

public void init(HttpServletRequest request) {
        servletContext = request.getServletContext().getContext("/alfresco");
 
        XmlWebApplicationContext  wac = (XmlWebApplicationContext)  servletContext.getAttribute("org.springframework.web.context.WebApplicationContext.ROOT");
 
       serviceRegistry = (ServiceDescriptorRegistry) wac.getBean(ServiceRegistry.SERVICE_REGISTRY);
    }

Это дает нам возможность получить PersonService, например.
serviceRegistry.getPersonService();

При попытке вызова какого-либо метода получает Exception, который говорит нам, что не задан Security Access. Не вопрос, думая я! Ведь есть замечательный класс AuthenticationUtil, который предоставляет метод .getRunAsUser(), который возвращает строку - username пользователя, который сейчас авторизован. Это позволило бы выполнить некоторый кусок кода от имени этого пользователя - AuthenticationUtil.runAs(...).
Но вот беда! Если пытаться просто выводить этот самый username, то получается странная картина. 
Если в альфреске с текущего компьютера и сессии никто не залогинен, то все правльно - получаем null и только null. Но ситуация меняется когда есть авторизованный пользователь. Тут начинается каша: мы получаем то null, то необходимый username, т.е. можно просто жать F5 и видеть каждый раз разный ответ, но при этом заметно преобладание null.

Собственно хотелось бы узнать: были ли у кого-нибудь похожие практики\задачи и как их удалось решить. Готовых решений не прошу. Мне хватит и тычка в необходимом направлении.



 

Комментарии

 Сударь, Вы все свои проблемы так решаете?
А я по-прежнему жду более разговорчивого собеседника =)
fufler аватар
 Зачем нужен такой адЪ? Не проще использовать REST API?
 Нужно знать текущего пользователя, который авторизован и в соответствии с этими данными в репозитории находить доступные отчеты. Своего рода атуентификация для BIRT via Alfresco. В данный момент стоит проблема с сессиями. На jsp странице использую forward на BIRT - в итоге получаю 2 сессии, но нахожусь в контексте Alfresco. Записываю все необходимые параметры в сессию Alfresco (ведь могу получить только ее из текущего контекста и request - благодаря forward не обновляется, а остается старым). Все отлично, все корректно отображается...НО!
Но при нажатии на ссылку внутри BIRT я перехожу уже в его контекст, из-за этого обнуляется request, session из Alfresco пропадает и я остаюсь без нужных мне параметров.

Есть идеи как получить из BIRT пользователя Alfresco,  сессия которого хранится на данном компьютере? Либо как передать параметром, но скрытым (т.е. не GET), а затем перейти в сам BIRT.
fufler аватар
 А BIRT умеет SSO? 
 Насколько я знаю - по-умолчанию нет. Придется писать модуль. Я уже думал в эту сторону.
Это позволит иметь доступ к BIRT через Alfresco. Это ОК.
В Alfresco я не имел дело с SSO. Какие дополнительные возможности это принесет? 
Мне в итоге то нужна возможность получению текущей сессии из BIRT (т.к. в сессии хранится текущий пользователь), я смогу это сделать?

fufler аватар
Это даст возможность быть залогиненным в обе системы с одного аккаунта. В итоге можно будет работать родными для обеих систем средствами.

Я бы всё-таки посмотрел на API BIRT и Alfresco подробнее — уверен, что есть нормальный способ добиться желаемого результата.