私は解決策を見つけたと思います。Java Web Start は、Internet Explorer と同じ Cookie ストアを使用します。JavaWebStart アプリケーションによって IE 永続 Cookie がどのように収集されるかについては、ここのコメントを参照してください。
これを機能させるために、次のように開発しました。
- JNLP と jar は保護されています
- IE 経由で JNLP にアクセスします。これにより、ログインして認証 Cookie を取得するログイン ページにリダイレクトされます。
Web サーバーには、認証 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 を収集するため、問題なくリソースにアクセスできます。
注: 認証がパラメーターとして渡される認証セッション トークンをサポートしている場合は、jnlp "jar" タグを拡張して AUTHSESSION 値を含めることもできます。
<jar href="your_jar.jar?AUTHSESSION=<session value>"/>
私たちの場合はそうではなく、認証セッションを Cookie として提供する必要があります。