2012-09-20 45 views
3

我正在编写一个Java应用程序,需要在调用该服务的方法之前登录到远程SOAP服务(JIRA)。通过SOAP服务向JIRA进行身份验证时存储安全密码

我看过如何做到这一点的例子,例如http://www.j-tricks.com/1/post/2010/8/jira-soap-client.html,但是我担心我需要把密码放到内存中。

我读过,我应该将密码存储为char [],但仍然存在,我很担心密码存储在明文中。

我该如何存储我的客户端用来登录SOAP服务的密码?我应该如何阅读并传递给JIRA?

编辑 该应用程序将使用Spring所以这是有可能的密码将被保存在bean配置文件中,而不是在代码中。

+0

一个很好的问题。我自己试过这样做,但由于时间不够,最终不得不放弃。我很好奇,如果有可能的话。 –

回答

0

SOAP登录方法返回一个可用于会话的字符串标记,因此在使用它之后不需要将密码存储在内存中。但我认为你在谈论长期使用。应用程序通常会有一个配置页面,以允许建立更永久的身份验证,然后每次连接重新配置时都需要输入密码。

+0

好处 - 一旦获得认证令牌,我可以擦除密码字符串。然而,应用程序是一个批处理过程,每次启动时(通常每晚)都需要使用JIRA进行验证。所以没有最终用户配置。我担心的是,我并不特别喜欢将密码保存在源代码或Spring配置文件中。 – johnmmcparland

+0

这就解释了为什么你的引用推荐一个char [] ...一旦密码找到它进入一个不可变的String对象的方式,它不能被改变,直到它被垃圾回收。 – phatfingers

+0

@phatfingers通常不会由于字符串池 – Woot4Moo

0

这是我最终决定的。

首先,一些澄清。

  • 密码被加密并存储在数据库中。
  • 密码是静态填充的(由DBA)。
  • 这是加密和解密的练习,因此哈希算法(如MD5)不适用。

我研究了SQL中的加密和Java中的解密方式,但没有一个特别好。所以我决定采取以下方法。

  • 当DBA填充密码,它们运行的​​特定于DBMS的加密方法(例如MySQL的加密)输入密码(例如插入creds(用户名,密码)值(“鲍勃”,加密(当“密码“));
  • 的SQL中检索密码,传递到弹簧应用程序作为一个属性,包括所述解密(例如选择用户,解密(密码)从creds)比

其他,这是用户管理和锁定数据库的练习,例如,只有某些人(DBA)可以完全访问并且应用程序使用只读用户。

希望这可以帮助别人在未来。

相关问题