Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从数据库中读取JSCHHOSTKEY值_Java_Servlets_Sftp - Fatal编程技术网

Java 如何从数据库中读取JSCHHOSTKEY值

Java 如何从数据库中读取JSCHHOSTKEY值,java,servlets,sftp,Java,Servlets,Sftp,我使用Jsch在Javaservlet中设置了一个安全的FTP,它运行在Windows上,并在Eclipse中开发。因此,目前我在数据库表中有所有SFTP详细信息,即用户名等,以使它们安全且可配置,除了我放在文本文件中的Windows注册表中的HostKey值和作为数据库中字段的文本文件的位置。在我获取SFTP详细信息作为对象之后,下面的代码从文本文件中获取HostKey String SFTPFile = SFTPD.getSftp_file(); jsch.setKnownHosts(SFT

我使用Jsch在Javaservlet中设置了一个安全的FTP,它运行在Windows上,并在Eclipse中开发。因此,目前我在数据库表中有所有SFTP详细信息,即用户名等,以使它们安全且可配置,除了我放在文本文件中的Windows注册表中的HostKey值和作为数据库中字段的文本文件的位置。在我获取SFTP详细信息作为对象之后,下面的代码从文本文件中获取HostKey

String SFTPFile = SFTPD.getSftp_file();
jsch.setKnownHosts(SFTPFile);
这很好,但我也想从数据库中读取HostKey,因为文本文件容易损坏、删除或篡改。我尝试了以下方法

InputStream IS = new ByteArrayInputStream(SFTPD.getSftp_hostkey().getBytes());
Channel channel = null;
ChannelSftp channelsftp = null;
JSch jsch = new JSch();
com.jcraft.jsch.Session session = jsch.getSession(SFTPUsername, SFTPHost, SFTPPort);

  try {
      session.setPassword(SFTPPassword);
      jsch.setKnownHosts(IS);
      session.connect();
      channel = session.openChannel("sftp");
      channel.connect();
      channelsftp = (ChannelSftp)channel; 
但在调试时,我在下面得到了这个错误。如何解决此问题并从表中读取值

15-Oct-2014 14:45:02 com.sun.xml.ws.transport.http.servlet.WSServletDelegate doGet
SEVERE: caught throwable
javax.xml.ws.WebServiceException: com.ctc.wstx.exc.WstxIOException: null
  at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:130)
  at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:285)
  at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:421)
  at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:99)
  at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:650)
  at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:263)
  at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync 
     (ServletAdapter.java:218)
  at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet
     (WSServletDelegate.java:159)
  at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost
     (WSServletDelegate.java:194)
  at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:80)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
     (ApplicationFilterChain.java:305)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter
     (ApplicationFilterChain.java:210)
  at org.apache.catalina.core.StandardWrapperValve.invoke
     (StandardWrapperValve.java:225)
  at org.apache.catalina.core.StandardContextValve.invoke
     (StandardContextValve.java:123)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke 
     (AuthenticatorBase.java:581)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
  at org.apache.coyote.http11.AbstractHttp11Processor.process
      (AbstractHttp11Processor.java:1001)
  at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process 
      (AbstractProtocol.java:585)
  at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)
Caused by: com.ctc.wstx.exc.WstxIOException: null
  at com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:511)
  at com.sun.xml.ws.util.xml.XMLStreamWriterFilter.writeCharacters
     (XMLStreamWriterFilter.java:99)

我想我已经设法解决了这个问题。第一次测试运行成功。而不是

InputStream IS = new ByteArrayInputStream(SFTPD.getSftp_hostkey().getBytes());
我将java.nio.charset.charset添加到导入中,并将其更改为

String SFTPHostKey = SFTPD.getSftp_hostkey();
InputStream IS = new ByteArrayInputStream(SFTPHostKey.getBytes(Charset.forName("UTF-
  8")));
另外,请注意,保存主机密钥的数据库字段是大小为255的varchar2