我一段时间以来一直在开发Java桌面应用程序,基本上它的作用是在线对MySQL数据库的CRUD数据进行处理。我现在的问题是安全性,我不想对客户端应用程序上的任何用户信息进行硬核化。我正在考虑这样做的两种方法:
对客户端应用程序中的大多数MySQL语句进行编码,并使用服务器应用程序将用户名和密码信息传输到客户端,因此客户端可以直接连接到数据库。我不喜欢这个主意,因为我不希望用户有任何方式来获取数据库凭据。
使用3层架构。我已经将客户端应用程序几乎完全编码,将服务器运行在MySQL上,现在我需要一个中间层来处理所有逻辑操作,凭据和所有内容,并与客户端应用程序进行通信,例如:如果客户端应用程序询问对于清单列表,然后服务器检查其凭据,并向客户端应用发送包含所有清单的文件。
我的问题是这个:
您应该对自己的第一选择表示怀疑。一方面,当MySQL和其他数据库服务器远离公共Internet进行防火墙保护时,它们的安全性要高得多。
您需要一个可以将数据传递到客户端层的服务器层。
重要安全提示不构建服务器层以接受来自客户端层的原始SQL查询。网络蠕变可能会使用它来发出诸如SELECT * FROM user
之类的查询并破坏您的数据。或DROP TABLE user
破坏系统。
制定一个API,您的客户端可以通过该API向您的服务器请求CRUD服务。您可能需要考虑一种REST风格的API,客户可以在其中说出诸如>]之类的内容。
或使用类似方法更新数据
POST https://example.com/user/id
tel=5551212&[email protected]
技巧是弄清楚您要在RE
代表性S tate T转移中使用哪种对象。然后,您可以使用http PUT创建它们,用POST替换或更新它们,并使用DELETE删除它们。REST风格的API在客户端中很容易实现;他们使用普通的HttpClient operations。通过https可以轻松保护它们。
通常,它们通过秘密令牌(API密钥)进行授权,并随每个请求一起包含在http标头对象中。您可以阅读有关的内容。
因此,您的服务器代码必须实现您的API。如果选择使用Java语言来实现它,那么servlet是必经之路:它们是开发和部署Java Web服务器代码的方法。您可以将它们部署在Tomcat或Jetty服务器环境中。
有很多有关如何执行此操作的资源。例如,https://www.journaldev.com/9170/restful-web-services-tutorial-java