我有一个使用Jersey构建的java REST web服务,出于安全原因,我想将 DriverManager.getConnection();
方法的参数:Url、用户名和密码保存在操作系统环境变量中。
由于每个请求都需要创建自己的数据库连接,我想知道调用System.getenv("key");
是否会存在性能问题?
这种做法的灵感来自于这篇文章:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-rds.html#java-rds-javase
是否有更好的选择?例如:
public class EnvironmentHelper {
static final String URL;
static final String USERNAME;
static final String PASSWORD;
static {
URL = System.getenv("URL");
USERNAME = System.getenv("USERNAME");
PASSWORD = System.getenv("PASSWORD");
}
}
这样我只加载一次变量,对吗?无论我收到多少请求。
System.getenv
的执行时间应该与哈希查找的时间相当,对性能影响应该为零。如果您担心性能问题,可以自行进行性能分析。 - ajbgetenv()
函数的开销微不足道。但是,这种技术并不比常规技术更安全。如果攻击者可以访问您的context.xml
文件,那么他也可以获取到这个函数的信息。 - user207421