Передайте cookie из JNLP в JAVAWS для загрузки защищенных ресурсов
У меня есть установка, где я получаю защищенный JNLP через браузер, и JNLP сохраняет куки аутентификации как свойство. Затем javaws запускается с файлом jnlp. Для jnlp требуются защищенные ресурсы, поэтому мне нужно передать куки-файл аутентификации процессу javaws, чтобы он мог использовать его при загрузке ресурсов... Как передать куки-файл auth процессу javaws?
Я проверил все параметры, доступные для javaws и JNLP, но я не смог найти, как это можно сделать.
Это вообще возможно?
2 ответа
Я думаю, что нашел решение. Java Web Start использует то же хранилище файлов cookie, что и Internet Explorer. См. Комментарии здесь, чтобы узнать, как постоянные файлы cookie IE используются приложением JavaWebStart.
Чтобы заставить это работать, я разработал следующее:
- JNLP и банки защищены
- Доступ к JNLP через IE - это перенаправит вас на страницу входа, где вы входите в систему и получаете аутентификационные куки
На вашем веб-сервере есть сервлет, который перехватывает куки-файл аутентификации, делает его постоянным и добавляет его в ответ
public class CookieServlet extends org.springframework.web.servlet.mvc.AbstractController { ... protected ModelAndView handleRequestInternal(final HttpServletRequest req, final HttpServletResponse resp) throws Exception { .... Cookie[] cookies = req.getCookies(); String session = null; if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("AUTHSESSION")) { session = cookie.getValue(); break; } } } if(null!=session) { Cookie cookie = new Cookie("AUTHSESSION", session); cookie.setMaxAge(<specify cookie age>); resp.addCookie(cookie); } ... }
Теперь запустите свой jnlp через cmd.exe - вы можете без проблем получить доступ к ресурсам, так как он собирает файлы cookie из магазина cookie IE.
Примечание: если ваша аутентификация поддерживает маркер сеанса аутентификации, передаваемый в качестве параметра, вы также можете расширить тег jnlp "jar", включив в него значение AUTHSESSION, т.е.
<jar href="your_jar.jar?AUTHSESSION=<session value>"/>
Для нас это не так, и сеанс аутентификации должен быть предоставлен в виде куки.
Я думаю, что все, что вам нужно, это динамически создаваемый JNLP с вашего сервера, который включает в себя куки (или даже лучше билет?) Как <parameter>
, Эта статья мне очень помогла http://wayback.archive.org/web/20160423141428/http://portal.krypthonas.de/2010/10/11/passing-dynamically-parameters-to-a-java-web-start-app-jnlp/