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