我有一个设置,我通过浏览器获取受保护的JNLP,JNLP将身份验证cookie保存为属性。然后使用jnlp文件运行javaws。 jnlp需要受保护的资源,因此我需要将身份验证cookie传递给javaws进程,因此在下载资源时可以使用它...如何将auth cookie传递给javaws进程?
我已经检查了javaws和JNLP可用的所有参数,但我无法找到如何做到这一点。
这甚至可能吗?
答案 0 :(得分:2)
我想我找到了解决方案。 Java Web Start使用与Internet Explorer相同的cookie存储 - 请参阅here中的注释,以了解JavaWebStart应用程序如何收集IE持久性cookie。
为了实现这一点,我开发了以下内容:
在您的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);
}
...
}
现在通过cmd.exe启动您的jnlp - 您可以访问资源而不会出现问题,因为它从IE cookie商店收集Cookie
注意:如果您的身份验证支持将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/