Я хочу, чтобы мой сервлет 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();