gpt4 book ai didi

java - 从 ColdFusion 调用 .jar 并在客户端计算机上运行

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:19 25 4
gpt4 key购买 nike

我正在使用 ColdFusion 11,并且我的类路径中有一个 eSignWeb.jar 文件(显然是用 java 创建的)。此 .jar 的作用是接收文件在客户端计算机上所在的路径,然后使用 Bouncy CaSTLe 分析该文件。

但是当我运行它时,出现以下错误:

Code: java.io.FileNotFoundException: C:\Users\name\Documents\clientfile.cer (The system can not find the specified path)

该错误是因为我的 .jar 文件尝试在服务器上而不是客户端计算机上查找 clientfile.cer 文件。我需要的是在服务器上运行的这个 .jar 可以在客户端计算机上搜索该文件。

重要:

  1. clientfile.cer 文件永远无法上传到服务器,因此必须在客户端进行分析。
  2. 我必须将 ColdFusion 与 java 结合使用

我在 ColdFusion 中的代码很简单:

<cfset eSign = createObject("java","eSignWeb.SignAB") />
<cfoutput>
<!--- TEST1--->
<cfdump var="#eSign#">
#eSign.callsignCF()#
<hr />
<!--- TEST2 WITH cfscript --->
<cfscript>
classLoader = createObject("java","eSignWeb.SignAB");
response = classLoader.callsignCF();
WriteOutput("Test whith CFSCRIPT " & response);
</cfscript>
</cfoutput>

我的 .jar 文件中的代码:

package eSignWeb;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.security.Security;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Date;
import javax.naming.InvalidNameException;
import javax.naming.ldap.LdapName;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class SignAB {
public String callsignCF(){

String vCer;

vCer = "C:\\Users\\name\\Documents\\clientfile.cer"; //Path where the .cer file is located on the client side

Security.addProvider(new BouncyCastleProvider()); // add bc as provider

String archivoCer;
X509Certificate certificado = null;
Date fechaFinal;
Date fechaInicial;
Date fechaActual;

//start cer
archivoCer = vCer;

try {
FileInputStream is = new FileInputStream(archivoCer);

try {

CertificateFactory cf = CertificateFactory.getInstance("X.509");
certificado = (X509Certificate)cf.generateCertificate(is);

fechaFinal = certificado.getNotAfter();
fechaInicial = certificado.getNotBefore();
fechaActual = new Date();

if(fechaActual.before(fechaInicial) && fechaActual.after(fechaFinal)){
return "Invalid date";
}else{
String myVarConRFC = "2.5.4.45";

String dn = certificado.getSubjectX500Principal().getName();
LdapName ldapDN = new LdapName(dn);

ldapDN.getRdns().forEach((index) -> {

if(index.getType().equals(myVarConRFC)){
//RFC
String myRFC = new String((byte[]) index.getValue());
}
});
}
}

catch (InvalidNameException ex) {
return "E0: Error on cer. Code: "+ ex;
}

catch(CertificateException a) {
return "E1: The specified file is not a valid certificate file. Code: " +a;

}

}
catch(FileNotFoundException fnfe) {
return "E2: Certificate file does not exist. Code: " +fnfe;
}
// End cer

return "Unknown error";
}
}

如您所见,.jar 在服务器上运行,这就是它找不到 .cer 文件的原因。知道如何获得允许 .jar 在客户端计算机上搜索文件的功能吗?

如果我可以将 .cer 文件上传到服务器,那就很容易了,但这是被禁止的。 .cer 文件永远不应离开客户端的计算机。

非常感谢您在这方面的任何指导!

最佳答案

仅 CF 无法完成此类任务,因为它仅在 CF 服务器上运行。它根本无法访问客户端文件。仅上传到服务器或服务器可访问的位置的文件(您说不能这样做)。

为了访问客户端计算机上的文件,您需要类似签名 Java AppletWeb Start Application ,它确实在客户端上运行。 “签名”部分很重要。出于安全原因,小程序等不能随心所欲地访问客户端计算机上的文件。用户必须明确授予 Applet 或 Web Start 应用程序执行此操作的权限。

关于java - 从 ColdFusion 调用 .jar 并在客户端计算机上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51337112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com