Я хочу, чтобы мой сервлет Domino получил сеанс аутентифицированного пользователя

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

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

Я был бы счастлив получить сессию, которая представляла подписавшего заявку. Я могу получить сеанс для зарегистрированного пользователя, позвонив сервлету с помощью? Open&login и войдя в систему. Это не практично.

Я посмотрел здесь: Как вы можете использовать SessionAsSigner в Java Bean, вызванном из XPage? где Mark Leusink ( Mark Leusink) подразумевает использование ExtLib getCurrentSessionAsSigner(). Я попробовал это, подписав все приложение с одним идентификатором пользователя, и он не возвращает сеанс. Кажется, ответ кроется в неспособности сервлета получить объект FacesContext.

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

5 ответов

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

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

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

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

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

Session session = NotesFactory.createSession();

Там было много хороших ответов на оригинальный вопрос. Спасибо большое.

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

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

Работает нормально в контексте OSGI, но в рамках продукта NSF

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

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

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

Затем в сервлете вызовите этот 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();
Другие вопросы по тегам