我已经开发了一个jnlp文件,当客户端从他/她的浏览器下载它时它正常工作。这里没问题,但客户端也可以访问我的jnlp引用的jar文件,并最终下载它们。
我不希望其他人通过从浏览器编写路径来下载我的jar。我只想让jnlp可以直接从浏览器访问。
我该如何解决这种情况?
答案 0 :(得分:3)
没有'修复'。如果启动应用程序的JWS客户端可以访问Jars,则可以通过直接获取来使用它们。
答案 1 :(得分:2)
您可以使用提供的JnlpDownloadServlet来阻止访问。 JnlpDownloadServlet(在随JDK提供的示例中查找它)将处理对Jar文件的请求并对它们执行diff。如果您设置了像
这样的web.xml文件<servlet>
<servlet-name>JnlpDownloadServlet</servlet-name>
<servlet-class>com.sun.javaws.servlet.JnlpDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JnlpDownloadServlet</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
然后对/ app中文件的所有请求都将通过此servlet。这将阻止用户进行简单的浏览以查看可用文件,但如果他们知道文件名,他们仍然可以创建get请求以通过servlet获取它。
如果这是一个问题,那么您还可以使用web.xml中的 security-constraint 设置来访问此servlet(就像使用任何其他servlet一样)。如果添加,则javaws启动程序将要求用户在下载文件之前提供有效凭据。我使用BASIC作为 auth-method 因为我不确定javaws客户端是否会尊重任何其他人。
答案 2 :(得分:0)
如果通过JSP或servlet动态生成jnlp怎么办(请参阅此处example)?
在这种情况下,您可以编写一个可以实现策略(基于cookie?)的过滤器来检索文件。如果未设置cookie,您可以禁用jar的下载。
请参阅以下article: http://lopica.sourceforge.net/faq.html#cookies