Security 在JBossWS中使用用户名令牌时,如何从内存中擦除密码?

Security 在JBossWS中使用用户名令牌时,如何从内存中擦除密码?,security,soap,garbage-collection,jbossws,Security,Soap,Garbage Collection,Jbossws,我正在使用JBossWeb服务作为支付服务应用程序。在某些时候,我需要对支付服务提供商进行远程SOAP调用,并且需要使用用户名令牌进行身份验证 我知道如何使用JBossWS执行此操作的唯一方法如下: Map<String, Object> requestContext = ((BindingProvider)port).getRequestContext(); requestContext.put(BindingProvider.USERNAME_PROPERTY, "foobar"

我正在使用JBossWeb服务作为支付服务应用程序。在某些时候,我需要对支付服务提供商进行远程SOAP调用,并且需要使用用户名令牌进行身份验证

我知道如何使用JBossWS执行此操作的唯一方法如下:

Map<String, Object> requestContext = ((BindingProvider)port).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, "foobar");
requestContext.put(BindingProvider.PASSWORD_PROPERTY, "changeme");
Map requestContext=((BindingProvider)端口).getRequestContext();
put(BindingProvider.USERNAME_属性,“foobar”);
put(BindingProvider.PASSWORD_属性,“changeme”);
但这里的问题是,“changeme”密码现在作为字符串对象在内存中,我无法控制何时(如果有的话)对其进行垃圾收集。如果攻击者此时转储内存,则可以找到凭据


有没有其他方法可以通过JBossWS进行安全的SOAP调用,在那里我可以控制密码在内存中的保留时间?

我很确定没有其他方法。字符串在Java中是不可变的,因此无法重写字符串。您可以使用字节数组存储密码,并且可以重写该字节数组。但无论如何,您可能必须在某个时候将其转换为字符串

另一方面,如果攻击者能够访问您的计算机以获得内存转储,那么您无论如何都会受到攻击。如果攻击者已经有那么多的访问权限,他几乎可以做任何他想做的事情