2013-02-08 2 views
2

Это похоже на довольно фундаментальный вопрос в работающем сервлете, размещенном на Domino. Я хочу получить доступ к ресурсам Domino, которые я разумно защитил, используя очень тонкую безопасность IBM Notes и Домино.Я хочу, чтобы мой сервлет Domino получил сеанс аутентифицированного пользователя

Я хочу, чтобы сервлет мог читать и записывать данные в Domino, сохраняя эти данные от клиента, который вызвал сервлет (или xAgent), и не позволяя клиенту писать напрямую.

Я был бы рад получить сеанс, который представляет собой подписчика приложения. Я могу получить сеанс для зарегистрированного пользователя, вызвав Servlet, используя: open & логин и вход в систему. Это непрактично.

Я искал здесь: How can you use SessionAsSigner in a Java Bean called from an XPage?, где Марк Леусинк (https://stackoverflow.com/users/1177870/mark-leusink) подразумевает использование ExtLib getCurrentSessionAsSigner(). Я пробовал это, подписав все приложение с одним идентификатором пользователя, и он не возвращает сеанс. Ответ, похоже, кроется в невозможности Сервлета получить объект FacesContext.

Такое ощущение, что ответ должен быть очевиден, но это не для меня. Есть идеи?

ответ

2

FacesContext является JSF материал и может использоваться XAgent (= XPage).

В сервлета вы можете сделать это:

Session session = NotesFactory.createSession(null, "user", "password"); 

ID сервера обычно не имеет пароля и делать это будет использовать идентификатор сервера:

Session session = NotesFactory.createSession(); 
+0

Спасибо за предложение.Я рассматривал NotesFactory, который потребовал бы, чтобы я создал DIIOP, который чувствует себя немного старомодным (у меня нет доказательств того, что это было всего лишь некоторое время, и я не уверен, насколько широко он используется). Возможно, мне придется попробовать и посмотреть, не вызывает ли это каких-либо проблем. Еще раз спасибо :-) –

+0

Вам понадобится DIIOP, если его та же машина - я думал, что DIIOP был только для удаленного доступа. – markbarton

+0

@JasonHook Вам не нужен CORBA/IIOP, если вы используете свой код на сервере Domino. –

0

com.ibm.domino.osgi.core .context.ContextInfo.getUserSession()

+1

Я импортировал баночки в свой проект, Servlet компилирует отлично и использовал функцию getUserSession() для печати effectUserName, и это вызывает java.lang.NoClassDefFoundError: com.ibm.designer.domino.napi.NotesAPIException. –

+1

Ошибка Msg заменяется другой ошибкой, если я помещаю входящий пакет в каталог/jvm/lib/ext, кажется, указывает на то, что ошибка вызвана не устранением класса Exception после того, как она породила ошибку :-) Должно быть установлено сервлет как плагин OSGi? Функция не принимает параметров, я предполагаю, что она либо предполагает, что пользователь уже аутентифицирован/возвращает анонимного/подписывающего сервлета/приложения? –

+0

см. Http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=Servlet%20Sample http://www.openntf.org/internal/home.nsf/project.xsp ? action = openDocument & name = MailerServlet http://www.youtube.com/watch?feature=player_embedded&v=J84dAECKots –

0

Jason - Я предполагаю, что вы в основном хотите, чтобы у вас была такая же функциональность, что вы получите запуск агента запроса веб-запросов, если вы не выбрали запуск в качестве веб-пользователя, другими словами s как подписавший код.

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

Затем в сервлете вызовите этот URL-адрес, установив основные параметры авторизации (имя пользователя & пароль).

Нечто подобное.

URL url = new URL(URL_TO_CALL); 
String authStr = "USERNAME:PASSWORD"; 
String authEncoded = Base64.encodeBytes(authStr.getBytes()); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setDoOutput(true); 
connection.setRequestProperty("Authorization", "Basic " + authEncoded); 
InputStream is = connection.getInputStream(); 
2

Проверьте источник проекта WebDav на OpenNTF. Он имеет весь код, который вам нужен

1

Было много хороших ответов на исходный вопрос. Огромное спасибо.

Решение, которое я предлагаю использовать, - это передать код, который у меня есть для плагинов OSGi. Похоже, что java-код/​​сервлеты в контексте NSF подчиняются элементам безопасности, которые смягчаются, когда один и тот же код работает в контексте OSGi. Код:

try { 
NotesThread.sinitThread(); 
Session s = NotesFactory.createSession("","<my username>","<my password>"); 
..... 
session = null; 
} catch (Exception e) { 
} finally { 
NotesThread.stermThread(); 
} 

прекрасно работает в контексте OSGI, но внутри в НФС микрофильтр

Смежные вопросы