想要用applet进行本地串口操作,已经对打包后的jar文件进行了数字签名,连安全策略也改了,可还是会出现 java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)的问题.怎么会这样呢?
还想请教一下,在客户端还需要对安全策略进行修改吗?
对不起没有分了,还请大家帮帮忙,万分谢谢~~
还想请教一下,在客户端还需要对安全策略进行修改吗?
对不起没有分了,还请大家帮帮忙,万分谢谢~~
解决方案 »
- JRE7U10在windows XP下运行导致IE崩溃
- 如何将一个int变量a的第N位设置为1
- 分享给初学者的一个约瑟夫问题,用最傻的方法写的
- 哪位有SWT中Table组件的使用用例代码?
- 问一个关于Eclipse的代码风格问题
- Java 有没有像 Oracle 的 Decode 这样的函数?
- 怪异的字符
- 关于布局的为难题
- 如果我能够完全掌握《Thinking in Java》这本书,我每月可以拿到多少钱??
- JDBC中URL的问题,请教高手给详细说明一下
- 正则表达式的含义是什么啊`` 它该怎么用啊``` 望高手能给详细解释一下```谢谢呢``
- thinking in Java 中的一个例子?
我看能否找到以前的代码
要怎么做呢~?能否大概讲一下~?谢谢~~
What is your first and last name?
[Unknown]: Hello
What is the name of your organizational unit?
[Unknown]: World
What is the name of your organization?
[Unknown]: FBI
What is the name of your City or Locality?
[Unknown]: New York
What is the name of your State or Province?
[Unknown]: New York
What is the two-letter country code for this unit?
[Unknown]: US
Is CN=Hello, OU=World, O=FBI, L=New York, ST=New York, C=US correct?
[no]: yesbash-3.00$ jarsigner -keystore keystore.db -storepass helloworld -keypass helloworld hello.jar helloworldWarning:
The signer certificate will expire within six months.按照上面的命令就产生了一个用RSA数字签名过的hello.jar
具体的keytool和jarsigner的命令可以参看Java Document帮助。
相应的,我又去修改了下安全策略文件,添加了
grant codeBase "file:/C:/Program Files/Java/jre1.5.0_10/lib-" {
permission java.security.AllPermission;
};
结果还是不行.....是不是我的安全策略文件改的有问题?
对不起,我不太明白你的意思?
嵌入代码如下:
<APPLET
ARCHIVE = "appjar.jar"
CODE="appjar.theone"
NAME="pplet"
HEIGHT=100 WIDTH=100 >
</APPLET>
把所有的改动都还原!
html代码不要动,就那个样,然后你在试试。
我的意思是,我不明白怎么个不使用法?是指不改它么?
java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)
恢复到你刚装完jdk时的模样。
就是c:\document and settings\<user name>\下面的以java.policy文件都删除。
C:\Documents and Settings\Administrator\Application Data\Sun\Java\Deployment
我用java的控制面板删除了,是这样么?如果只是C:\Documents and Settings\Administrator的话,我没有发现有.java.policy文件.
结果依旧.....
JAVA_HOME/jre/lib/security/java.policy
或者任何其他相关的
jre/lib/security/java.policy?
这些文件都是java平台的安全策略文件不能修改。
如果实在不行,建议你将你的操作系统上的所有java安装都删除干净了,包括那个java目录,然后在重新安装一个jdk,然后,什么都不要动运行你的applet,试一试。
并且我刚还特地又重新给jar签了一次名,结果依旧.....
理论上来说,如果想使得Applet拥有所有权限,只要使用RSA证书签名,然后用户接受这个证书,任何其他地方都不用做修改就可以的。
如下:
security: 使用 Internet Explorer ROOT 证书无法成功验证证书
security: 无可用的时间标记信息
basic: 模态已推进
basic: push sun.awt.windows.WToolkit@bb6ab6
basic: 模态已推进
basic: 模态已弹出
basic: pop sun.awt.windows.WToolkit@bb6ab6
security: 用户只对此会话的代码授予权限
security: 正在将证书添加到部署会话证书库中
security: 已将证书添加到部署会话证书库中
security: 正在将证书保存至部署会话证书库
security: 已将证书保存至部署会话证书库会不会是这里的问题?
版本 1.5.0 (build 1.5.0_10-b03)
版权所有 2006 Sun Microsystems, Inc.
你的applet肯定调用其他的类库了,而其他的类库是没有经过RSA签名的。需要保证你的applet本身、以及它所调用的第三方类库都要经过RSA签名才行!
无论怎样,都等我JDK装完了再说吧.....
但是,它应该是作为本地文件被访问的呀~?
还是说只要comm.jar??我觉得应该是通过applet调用客户端的comm相关文件,来进行串口操作.
你觉得呢?
并且将你的html代码写成:
<APPLET
ARCHIVE = "appjar.jar,comm.jar"
CODE="appjar.theone"
NAME="pplet"
HEIGHT=100 WIDTH=100 >
</APPLET>
public static boolean appjar.PortOP.open() throws javax.comm.UnsupportedCommOperationException,java.io.IOException,javax.comm.NoSuchPortException
可以理解为关于沙盒限制的问题已经解决了么......?
可是,同时我在测试的另一个文件读取(同样通过applet)程序,依然不行....
...我觉得我快疯了....
还有,现在我的jarsinger不能用了.....= =||
不管了,我要回家了....饿了....
可不可以加我的QQ呢?32053666
非常感谢你的帮助~~
[email protected]
这些本来属于比较基础的问题啊
我想你也许没有用过comm吧?它是java的扩展API,我不能也不会改它....- -
必须放在JDK下面啊~如果你有兴趣的话,可以去下面这个网页里看看它的简介.
http://www.fixbase.com.cn/bbs/simple/index.php?t1170.html
另外,问题依然没解决.....昨天我看错了....对不起.....
应该有其他方法实现的。
这上面解释了一些comm的FAQ:
Q: Can I use the Java communications API in applets?A: Yes in signed applets, but no in unsigned applets (most cases). Since we do not allow unsigned applets access to any communications port under the JDK1.1 security model, you can not use the Java communications API with unsigned applets. We do plan to be compliant to JDK1.2 security model in later releases, which might allow trusted applet access to ports.
但我想如果你这样:
1.安装一个JDK
2.将jar拷贝到jre/lib/ext,dll拷贝到jre/bin,还有javax.comm.properties拷贝到jre/lib目录下,注意把你机器能发现的jre的这三个目录都拷贝了,我恐怕你浏览器上使用的jre是和你拷贝jre不一样的目录,注意如果你安装了一个jdk,实际上它会有两个jre。因此最好把你机器上所有的这些地方都拷贝全了。
3.签名你的applet.jar
应该是可以的。
所以我想,暂时应该和comm那边没什么关系.
我突然想起来,原因可能是你的html代码,<applet这种模式写法要使用jdk带的converter转化一下才行,才能使用正确的jre,很有可能是这个原因。
java -jar htmlconverter.jar -gui