使用com.ibm.as400.access时密码未设置错误.带有JNDI的AS400JDBCDataSource



我正在尝试使用com.ibm.as400.access进行JDBC连接。带有JNDI的AS400JDBCDataSource。当我调试时,我注意到当InitialContext被设置时,创建了一个数据源实例。当我从我的代码中得到引用时,另一个实例被创建,一个AS400对象的副本(其中包含url,用户名和连接配置)。

在第一个实例中调用

as400Ds.setPassword("MYPWD");

问题是当AS400实例被共享时密码丢失,所以我得到这个错误

Password is not set

public void setSavePasswordWhenSerialized(boolean savePassword)

设置是否在序列化此数据源对象时将密码与其他属性一起保存在本地。如果保存了密码,则由应用程序来保护对象的序列化形式,因为它包含连接到IBM i系统所需的所有信息。默认为false。将密码与其他属性一起保存存在安全风险,因此默认情况下不保存密码。如果应用程序程序员选择接受此风险,请将此属性设置为true,以强制工具箱在序列化数据源对象时将密码与其他属性一起保存。

IBM文档

结果是如果你调用

as400ds.setSavePasswordWhenSerialized(true);

在创建的第一个实例上共享密码。

但是,对我来说,这不是预期的行为。对于任何其他JDBC驱动程序,都不需要做类似的事情。

有谁能解释一下这背后的原因吗?

调用此方法时是否可能存在安全漏洞?或者其他不需要什么东西的JDBC驱动程序?

最新更新