近日维护的老旧系统出现一个bug,
正常的文件上传无法进行 文件上传下载协议为smb协议
该系统上传方式比较老旧,在JSP页面上引用applet上传,即调用某一个jar中的class类
主要代码如下:
<object code="AB.class" width="100" height="100">
<param name="java_archive" value="CCC.jar">
<param name="files" value="">
<param name="files" value="">
<param name="files" value="">
</obeject>
这个jar包与Jsp页面放置在同一文件夹下
由于之前做过一个应用服务的迁移,在AB类中需要修改对应的文档服务器信息地址
由于没有源码,需要将该jar包进行反编译修改类文件,然后再重新编译再打包替换原来的jar
这个jar中很多class文件都是低版本jdk,而目前要修改的class文件已经到jdk1.6 (之前一直纠结与是否是由于修改该AB文件后由于jdk版本编译问题,而出现后续很多问题)
由于要修改jar中的CLASS文件比较困难,采用的方法供参考:
首先通过反编译工具 JAD 或者jd-gui 将对应的要修改的类反编译出来,(整个jar反编译的时候发现很多错,修改起来非常麻烦)报错源码信息
然后将该CCC.jar通过winrar软件删除该AB.class文件
然后在myeclipse里面新建一个工程,创建同名AB类,将反编译的信息复制进去,在工程中引用CCC.jar
修改对应的源码AB.java
然后通过 FAT jar(打jar包的插件)将该工程打jar包为同名CCC.jar
成功打出jar包以后,发现在运行时会出现各种错误,
如
java.security.AccessControlException : access denied (java.util.PropertyPermission *.* read)错误
java applet java.lang.System.property (Unknown Source)
错误
一直查,一直被各自在jre修改配置文件,在服务器端添加数字签名等引导,查了很久都没有结果
突然想到我之前做过应用服务器迁移,于是比对老服务器上和新服务器 对应tomcat的配置是否一致,
(虽然版本一样,但新服务的tomcat是自己装的,老服务器上的tomcat是前面很多人弄过的)
发现在tomcat/conf/catalina.policy文件有不一样的地方,老服务器上 有一条 配置
在grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar"{
}
中新增 permission java.security.AllPermission;
添加这一条信息后,问题解决。
目测应该是放开了到了最高权限了。
具体的原因可能需要再研究一下tomcat配置文件的资料,求高手解答告知,也希望对其他小伙伴有所帮助。