将Cookie从JNLP传递到JAVAWS以下载受保护的资源

时间:2014-11-26 15:46:34

标签: java cookies java-web-start jnlp java-ws

我有一个设置,我通过浏览器获取受保护的JNLP,JNLP将身份验证cookie保存为属性。然后使用jnlp文件运行javaws。 jnlp需要受保护的资源,因此我需要将身份验证cookie传递给javaws进程,因此在下载资源时可以使用它...如何将auth cookie传递给javaws进程?

我已经检查了javaws和JNLP可用的所有参数,但我无法找到如何做到这一点。

这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

我想我找到了解决方案。 Java Web Start使用与Internet Explorer相同的cookie存储 - 请参阅here中的注释,以了解JavaWebStart应用程序如何收集IE持久性cookie。

为了实现这一点,我开发了以下内容:

  1. JNLP和罐子受到保护
  2. 通过IE访问JNLP - 这会将您重定向到登录页面并获取身份验证cookie
  3. 在您的Web服务器中有一个servlet拦截身份验证cookie,使其持久化并将其添加到响应中

    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. 现在通过cmd.exe启动您的jnlp - 您可以访问资源而不会出现问题,因为它从IE cookie商店收集Cookie

  5. 注意:如果您的身份验证支持将auth会话令牌作为参数传递,那么您还可以扩展jnlp“jar”标记以包含AUTHSESSION值,即

    <jar href="your_jar.jar?AUTHSESSION=<session value>"/>
    

    对于我们来说情况并非如此,并且auth会话必须作为cookie提供。

答案 1 :(得分:1)

我认为你需要的只是一个动态创建的服务器JNLP,其中包含cookie(甚至更好的票证?)<parameter>。这篇文章给了我很多帮助http://wayback.archive.org/web/20160423141428/http://portal.krypthonas.de/2010/10/11/passing-dynamically-parameters-to-a-java-web-start-app-jnlp/