`
xsh5324
  • 浏览: 70673 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

谨用java.ext.dirs系统属性!

    博客分类:
  • java
阅读更多

众所周知,java中系统属性java.ext.dirs指定的目录由ExtClassLoader加载器加载,如果您的程序没有指定该系统属性(-Djava.ext.dirs=sss/lib)那么该加载器默认加载$JAVA_HOME/lib/ext目录下的所有jar文件。但如果你手动指定系统属性且忘了把$JAVA_HOME/lib/ext路径给加上,那么ExtClassLoader不会去加载$JAVA_HOME/lib/ext下面的jar文件,这意味着你将失去一些功能,例如java自带的加解密算法实现。

 

为了证明,我给弄个示例:

 

import com.sun.crypto.provider.AESCipher;//这个类是$JAVA_HOME/ext/lib/sunjce_provider.jar中的

public class Test{
        public static void main(String[] args){
                AESCipher cipher=new AESCipher();
                System.out.println(cipher.getClass());
                System.out.println(Test.class.getClassLoader().getParent());
                System.out.println(System.getProperty("java.ext.dirs"));
        }
}

 执行:

 

 

    javac Test.java

    java Test

 

打印:

 

class com.sun.crypto.provider.AESCipher

sun.misc.Launcher$ExtClassLoader@da4b71

D:\Program Files (x86)\Java\jdk1.7.0_60\jre\lib\ext;C:\windows\Sun\Java\lib\ext

 

执行:

 

    java -Djava.ext.dirs=lib Test

 

打印:

 

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/crypto/provider/AESCipher

        at Test.main(Test.java:5)

Caused by: java.lang.ClassNotFoundException: com.sun.crypto.provider.AESCipher

        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

        ... 1 more

 

————————————————————————————————————————————————————————————————————————————————————————

 

前天给项目加SSL协议的时候出现了这个问题,在本地测试没有任何问题,但是一上测试环境测试的时候出现握手失败,抓包分析发现客户端连上服务器后给服务端发出了154个byte的数据包,服务端ack后立即给断开连接了。查看服务器日志后发现这样一段错误:“Could not generate DH keypair”,起初怀疑这会不会是JDK有问题,后来经仔细排查发现java的加密算法实现都在jdk扩展库里面,而我们的程序给指定了-Djava.ext.dirs=lib,这一动作导致sun.misc.Launcher$ExtClassLoader扩展类加载器不会加载默认$JAVA_HOME/lib/ext下的包了。

 

不得不承认java.ext.dirs系统属性在部署非web项目的时候非常省事,但是用它的时候请记住这一点!~

 

0
2
分享到:
评论

相关推荐

    Javapath.bat

    用于自动配置java安装后的系统配置路径,安装完成java工具包JDE之后,直接运行本资源脚本,然后输入刚刚安装完成的JDE路径,即可自动配置Windows下环境变量所需要的所有信息。

    9异常,系统属性,Math类.rar

     ●java.ext.dirs:JDK的安装目录;  ●os.name:操作系统名称;  ●user.name:用户登录名称;  ●os.version:操作系统版本;  ●path.separator:当前操作系统的路径分隔符;  ●user.dir:当前用户...

    linux-java-jar包启动脚本

    linux-java-jar包启动脚本

    jcuda实现的dbscan

    6. 然后javac -Djava.ext.dirs="JCuda-All-0.8.0-bin-linux-x86_64" CudaGdbscan.java和javac -Djava.ext.dirs="JCuda-All-0.8.0-bin-linux-x86_64" Test.java分别编译; 7. 最后运行java -Djava.ext.dirs="JCuda-...

    wsdl2java工具

    set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Output_Path=.\source //输出目录 set Package= com.test.webservice.client %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% ...

    sunjce_provider-1.0.0.jar

    Solving the problem was a matter of putting the sunjce_provider.jar in one of the folders specified in the java.ext.dirs parameter. Hard to find, easy to solve. 把sunjce_provider.jar 放到JDKclasspath...

    selenium快速入门示例

    cd D:\selenium快速入门示例 D: set JAVA_HOME=E:\tools\java\jdk1.8.0_181x64 set PATH=%JAVA_HOME%\bin;%PATH% javac -encoding utf-8 -Djava.ext.dirs=....java -Djava.ext.dirs=. SogouTest1 pause

    简单的JAVA HTML服务器

    java -Djava.ext.dirs=. httpserver.HttpServer [HTML服务所在路径] [端口] HTML服务所在路径及端口参数是可选的,路径默认路径为当前应用所在路径,默认端口为1234,首页文件可为index.html或 index.html 启动好后...

    积分管理系统java源码-eladmin:根据原eladmin项目进行改造。整合ELK、ShardingSphere多数据源、多Redis、消

    -Djava.ext.dirs=lib #启动示例 nohup java --add-opens java.base/java.lang=ALL-UNNAMED -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Djava.ext.dirs=lib -jar eladmin-starter-...

    Java小程序接口上传demo

    1、解压文档后,"/tmp/模板文件.doc" 2、然后在jar包的当前路径的执行一下以下命令(前提安装了jdk1.8) 输入命令:java -Djava.ext.dirs=./lib -jar upLoadFileTestDir.jar

    ibm-DA-STORAGE-MANAGER-10-INSTALLLOG.LOG

    Mon Oct 21 14:16:23 CST 2013 ...java.ext.dirs: C:\Users\yang\AppData\Local\Temp\I1382336114\Windows\resource\jre\lib\ext java.version == 1.5.0_13 (Java 2+) java.vm.name == Java HotSpot(TM) Client VM

    jna-demo:jni测试demo

    需要用到的指令: Linux环境下构建动态库gcc -fPIC ... Linux环境下运行java(同时把jna.jar放置目标目录下) java -Djava.ext.dirs=. cn.weezoo.jnademo.Test run java -Djava.ext.dirs=. cn.weezoo.jnademo.Test run

    jaxb-api-2.2 jaxb-impl

    B, java web 项目要用一个可以正常启动的web项目(当然没用到jaxb的web项目),打印System.out.println(System.getProperty("java.endorsed.dirs"));即可,我的是java web项目,打出的是E:/tomcat6/common/endorsed ...

    sipmask_r50_caffe_fpn_ssd_gn_10x.pth

    sigmask算法pytorch模型,https://arxiv.org/pdf/2007.14772.pdf,论文名称:SipMask: Spatial Information Preservation for Fast Image and Video Instance Segmentation (ECCV2020)

    sner:斯坦福命名实体识别器服务器的Python接口

    java -Djava.ext.dirs=./lib -cp stanford-ner.jar edu.stanford.nlp.ie.NERServer -port 9199 -loadClassifier ./classifiers/english.all.3class.distsim.crf.ser.gz -tokenizerFactory edu.stanford.nlp.process....

    tomcat6.0 修改启动内存设置 java jvm参数配置

    在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh 添加:JAVA_OPTS='-Xms...-Djava.endorsed.dirs="C:\\ApacheGroup\\Tomcat 5.0\\common\\endorsed" -Xrs 加入 -Xms300m -Xmx350m 重起tomcat服务,设置生效

    jaxb-api-2.1.jar

    在使用webservice,esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded...执行System.out.println(System.getProperty("java.endorsed.dirs"));输出jaxb-api-2.1.jar应该放的目录。下载附件放到目录下即可。

    Tomcat9.0-read:tomcat源码阅读

    Djava.endorsed.dirs = D:\ code \ tomcat-read \ endorsed -Djava.io.tmpdir = D:\ code \ tomcat-read \ temp -Djava.util。 logging.manager = org.apache.juli.ClassLoaderLogManager -Djava.util.logging....

    tomcat-source-code:tomcat8.x原始码-tomcat source code

    -Djava.endorsed.dirs=catalina-home/endorsed -Djava.io.tmpdir=catalina-home/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=home/conf/logging....

    tomcat8:tomcat8源码分析

    -Dcatalina.home=launch -Dcatalina.base=launch -Djava.endorsed.dirs=launch/endorsed -Djava.io.tmpdir=launch/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging....

Global site tag (gtag.js) - Google Analytics