无法为自研应用添加Java安全例外,启动程序遇阻求解决方案
解决Java Web Start应用被安全拦截及例外列表添加失败的问题
我来帮你一步步解决这个Java Web Start的安全拦截问题,你遇到的情况其实挺常见的,主要是Java安全策略和本地服务器配置的细节没处理对,咱们逐个排查:
一、先确认本地服务器的访问有效性
你用的是127.0.0.2这个虚拟主机,首先得确保这个地址能正常访问到你的文件:
- 打开浏览器,直接输入
http://127.0.0.2/launch.jnlp和http://127.0.0.2/app.jar,看看能不能正常下载或打开这两个文件。如果出现404或者无法访问,说明你的虚拟主机配置有问题,得先把服务器调通,不然Java找不到合法的来源地址。 - 划重点:Java安全例外列表只认HTTP/HTTPS协议的地址,
file://开头的本地路径在新版Java里是不允许添加到例外的,所以别再试那些本地文件路径了,专注用服务器的HTTP地址。
二、正确添加安全例外列表的步骤
- 打开Java控制面板:Windows系统可以在控制面板里找到「Java」图标,或者直接在命令行输入
javacpl快速打开。 - 切换到「安全」选项卡,点击「编辑站点列表」按钮。
- 添加地址的时候,推荐直接填服务器的根地址:
http://127.0.0.2/,这样整个站点下的所有jnlp和jar文件都会被信任。如果非要指定单个文件,一定要确保地址完全正确,比如http://127.0.0.2/launch.jnlp,注意不要多打斜杠或者拼写错误。 - 添加完成后点击「确定」,重启浏览器再尝试通过链接启动jnlp文件。
三、解决javaws手动启动时显示file://的问题
你手动启动时看到Location是file://,是因为你直接用本地路径打开了jnlp文件,javaws把它识别成了本地离线应用,而不是从服务器加载的在线应用。正确的做法是:
- 要么从浏览器里点击jnlp的链接启动(前提是服务器能正常提供这个文件);
- 要么在命令行里用服务器地址启动,输入命令:
javaws http://127.0.0.2/launch.jnlp,这样javaws就会从HTTP地址加载应用,Location就会显示正确的服务器地址,也能正常匹配你添加的例外列表。
四、额外的关键配置检查
- jnlp文件的
codebase属性:新版Java要求jnlp文件明确声明应用来源,你需要在jnlp的根标签里加上codebase="http://127.0.0.2/",比如:
这样Java能明确知道应用的合法来源,减少安全拦截的概率。<jnlp codebase="http://127.0.0.2/" href="launch.jnlp"> - jar文件的签名问题:如果你的jar没有签名,即使添加了例外,新版Java也可能拦截。如果是测试用,可以给自己的jar做一个自签名证书:
- 用keytool生成密钥库:
按照提示输入密钥库密码、个人信息即可。keytool -genkey -alias testalias -keystore testkeystore.jks - 给jar文件签名:
jarsigner -keystore testkeystore.jks app.jar testalias
- 用keytool生成密钥库:
内容的提问来源于stack exchange,提问作者Jason




