我需要保护我的主要 java 应用程序和我的 MYSQL 服务器之间的连接。现在,我的主要 Java 应用程序中有一个类,其中包含有关我的 SQL 服务器的信息(登录详细信息;用户、密码、架构等)。
我尝试混淆该类,但没有成功。然后我听说了一些关于使用连接信息调用外部 Java 应用程序并安全地检索该信息的信息。
我怎么能执行这样的事情?
Runtime run;
Process pr = null;
run = Runtime.getRuntime();
pr = run.exec("your program.jar");
pr.getInputStream().close();
InputStream eos = pr.getErrorStream();
您可以使用文件将您的信息传递给 jar 应用程序
在处理客户端/服务器风格的应用程序时,所有的业务逻辑,包括持久层,都应该在服务器端维护。
也就是说,客户端连接到某个服务器进程并发出请求。它永远不应该关心数据是如何管理或存储的。它只关心获取和操作数据。这也意味着您集中了与该数据相关的业务,这意味着如果它发生变化,您不太可能需要更改客户端。
这也意味着数据库的所有访问信息永远不会离开服务器的域。
现在的问题是,你如何实现。这个答案将归结为您想要实现什么以及您想要实现它的方式,但是,我还要补充一点,客户端应该首先与服务器进行身份验证,这意味着必须让用户输入用户名和密码,以便能够访问数据(除非它是公共可访问的 API,否则您可能不在乎)。
RMI。这将允许您公开客户端可以与之交互的服务器对象。如果您希望将对象从服务器发送到客户端,这很好。它允许客户端与 Java 对象进行交互,就好像它们是本地对象一样。
从编码的角度来看,这是一个(相对)简单的解决方案,因为您正在处理 Java 对象。但问题是,只有 Java 客户端(具有正确的库)才能访问服务器。
普通插座。这将允许您连接到服务器上的服务并与之通信。
您甚至可以在客户端和服务器之间序列化对象,让应用程序也可以处理 Java 对象。
这也是一种更加困难的方法,因为您要负责处理低级协议和错误处理(RMI 会为您处理)。
但是,这种方法确实为您提供了其他客户端连接到您的服务器的机会(只要您只使用普通套接字和序列化对象;))。
这是很多工作......
某种 Web 服务(例如 Tomcat 下的 Servlet 或事件 J2EE 服务器),它将使用简单的 HTTP 请求来列出可用服务/功能,这些服务/功能将返回诸如 JSON 或 XML 响应之类的内容,然后客户端需要解析这些响应。
到目前为止,这是最开放的并且可能是最常见的解决方案。运行起来需要一些工作,但与使用套接字之类的东西相比,它的参与程度要低得多,而且也是最灵活的,因为每次您想要更改或更新服务时都不需要发布任何库。
现在所有这些都允许您通过 SSL 在线提供安全连接,您只需要建立从客户端到服务器的正确连接,因此您获得了更高级别的安全性。
每个都将数据库访问隐藏在服务器层后面,从而为数据库增加了额外的保护。