当前位置: 首页 > 面试题库 >

如何确保在Java中销毁String对象?

拓拔松
2023-03-14
问题内容

我公司的员工需要通过我编写的程序来修改SQL
Server数据库中的数据。该程序首先使用Windows身份验证,我要求DBA授予该特定用户对该数据库的写访问权限。

他们不愿意这样做,而是给了 我的 Windows用户帐户写权限。

因为我信任这个人,但不足以让他在打开会话的情况下工作90分钟,所以我只向程序添加一个登录提示,询问用户名和密码的组合,然后使用它登录SQL
Server。我将登录,并信任我的应用程序,让他仅执行他需要做的事情。

但是,这带来了小的安全风险。该密码字段教程在
太阳
Oracle的网站指出,密码应保持在内存中所需要的最短时间,并为此目的,该getPassword方法返回一个char[]数组,一旦你用它做,你可以为零。

但是,Java的DriverManager类仅接受String对象作为密码,因此一旦完成密码处理,我将无法立即处理它。而且由于我的应用程序在分配和内存需求上还很低,所以谁知道它在内存中可以保留多长时间?如上所述,该程序将运行相当长的时间。

当然,我无法控制任何的SQL Server的JDBC类与我的密码,但我希望我能控制什么 做我的密码。

有没有String使用Java
销毁对象或将对象归零的确定方法?我知道两者都与语言背道而驰(对象破坏是不确定的,String对象是不可变的),并且System.gc()也是不可预测的,但是仍然;任何想法?


问题答案:

所以,这是个坏消息。我很惊讶没有人提到它。使用现代垃圾收集器,甚至整个char []概念都被破坏了。不管您使用String还是char
[],数据最终都会存在谁知道多长时间的内存中。这是为什么?因为现代jvm使用世代垃圾收集器,简而言之,该垃圾收集器会在 各处复制对象
。因此,即使您使用char
[],它使用的实际内存也可能会复制到堆中的各个位置,从而使密码的副本无处不在(并且没有执行者gc会将旧内存归零)。因此,当您将最后拥有的实例清零时,您只是将内存中的最新版本清零。

长话短说,没有防弹方法来处理它。您几乎必须信任该人。



 类似资料:
  • 问题内容: 我在接受以下采访时遇到了这个问题: 如何在Java中销毁对象? 答案应该是e? 如果e不在那里怎么办?然后 ?显然,c不是答案。a和b将为整个应用程序执行gc(问题需要一个对象)。我认为这是d,因为finalize()刚好在gc之前被调用(但是是否有必要在finalize gc之后被调用?)还是我错了?您必须在那里回答这个问题吗? 问题答案: 答案E是正确答案。如果E不存在,您将很快用

  • 问题内容: 我对垃圾收集器在Java中的工作方式有一个大致的了解,但是我销毁对象的原因不是因为我关心释放内存,而是因为功能。我可以用一个例子更好地解释: 假设我正在制作涉及金钱的游戏。当某人从地面上捡起一个物体时,我想调用该物体的方法,该方法涉及为该人的钱包添加一个值。 之后发现,我不希望别人能够把它捡起来。换句话说,我不希望自己或任何其他程序能够不经意间拨打电话: 因此,在Bob拿起钱后,它的价

  • 对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过, 在清除对象时,由系统自动进行内存回收,不需要用户额外处理。这也是 Java 语言的一大特色,某种程度上方便了程序员对内存的管理。 Java 语言的内存自动回收称为 垃圾回收(Garbage Collection)机制,简称 GC。垃圾回收机制是指 JVM 用于释放那些

  • 问题内容: 我正在尝试正确注销管理员用户。这是我的功能: 基本上,一旦我对密码进行了身份验证,就将会话设置为有效(总共只有1个用户)。现在,当管理员点击注销时,我想销毁当前会话,并销毁cookie,以便他们不能只是使用浏览器中存储的会话cookie返回管理页面。但是我的代码不起作用。我点击注销,然后我可以直接导航回到管理页面。但是,如果我删除Cookie,则该功能非常完善。那么这里的cookie删

  • 本文向大家介绍Java中对象的销毁方法分析,包括了Java中对象的销毁方法分析的使用技巧和注意事项,需要的朋友参考一下 本文较为详细的分析了Java中对象的销毁方法。分享给大家供大家参考。具体分析如下: Java中的基本数据类型变量和对象的名称引用变量如定义在方法中,都为局部变量。但对象本身不一定是局部生命周期。如函数外存在其他对该对象的引用变量,则该对象的生命周期延伸至该其他引用变量所在的块。

  • 问题内容: 我在hapijs中使用jwt插件和策略。 我可以在登录用户时创建jwt令牌,并通过’jwt’策略使用同一令牌对其他API进行身份验证。 我将令牌设置为cookie,其中是令牌名称。另外,我没有将这些令牌保存在数据库中。 但是,注销时如何销毁jwt令牌? 请提出一种方法。 问题答案: JWT存储在浏览器中,因此删除令牌以删除客户端的cookie 如果您还需要在令牌到期之前从服务器端使令牌