Передайте cookie из JNLP в JAVAWS для загрузки защищенных ресурсов

У меня есть установка, где я получаю защищенный JNLP через браузер, и JNLP сохраняет куки аутентификации как свойство. Затем javaws запускается с файлом jnlp. Для jnlp требуются защищенные ресурсы, поэтому мне нужно передать куки-файл аутентификации процессу javaws, чтобы он мог использовать его при загрузке ресурсов... Как передать куки-файл auth процессу javaws?

Я проверил все параметры, доступные для javaws и JNLP, но я не смог найти, как это можно сделать.

Это вообще возможно?

2 ответа

Решение

Я думаю, что нашел решение. Java Web Start использует то же хранилище файлов cookie, что и Internet Explorer. См. Комментарии здесь, чтобы узнать, как постоянные файлы cookie IE используются приложением JavaWebStart.

Чтобы заставить это работать, я разработал следующее:

  1. JNLP и банки защищены
  2. Доступ к JNLP через IE - это перенаправит вас на страницу входа, где вы входите в систему и получаете аутентификационные куки
  3. На вашем веб-сервере есть сервлет, который перехватывает куки-файл аутентификации, делает его постоянным и добавляет его в ответ

    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);
            }
            ...
        }
    
  4. Теперь запустите свой 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/

Другие вопросы по тегам