相关疑难解决方法(0)

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

我公司的员工需要通过我制作的程序修改SQL Server数据库中的数据.该程序首先使用Windows身份验证,我要求DBA为此特定用户提供对所述数据库的写访问权限.

他们不愿意这样做,而是给我的 Windows用户帐户提供写访问权限.

因为我相信这个人但是还不足以让他在我的会话打开的情况下工作90分钟,我只会在我的程序中添加一个登录提示,要求输入用户名和密码,然后使用它登录到SQL Server.我会登录,并相信我的应用程序让他只做他需要的东西.

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

但是,Java的DriverManager类只接受String对象作为密码,所以一旦我完成它,我将无法处理密码.而且由于我的应用程序在分配和内存要求方面非常低,谁知道它能在内存中存活多久?如上所述,该程序将运行相当长的时间.

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

有没有一种可靠的方法来破坏/清除StringJava对象?我知道两者都有点违背语言(对象破坏是非确定性的,String对象是不可变的),并且System.gc()有点不可预测,但仍然存在; 任何的想法?

java security

38
推荐指数
3
解决办法
7533
查看次数

字符串池与常量池

我们来看下面的代码片段:

  String s1 = "Hello";
  String s2 = "Hello"; 
Run Code Online (Sandbox Code Playgroud)

由于实习,两个变量都引用同一个对象.由于字符串是不可变的,因此只创建一个对象并且它们都引用同一个对象.

A constant pool也是一种东西,它包含在类中声明的所有常量(整数,字符串等).它是针对每个班级的.

 System.out.println("Hello");  // I believe this Hello is different from above.
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是否string pool在常量池中引用常量字符串对象的池?
  2. 如果是,字符串池在整个应用程序中是通用的还是特定于类?

java string jvm constants

20
推荐指数
1
解决办法
8980
查看次数

java中的字符串POOL

Java有字符串池,因为字符串类的对象是不可变的.

但我的问题是 -

制作String POOL需要什么?

为什么字符串类没有像其他类一样保存自己的值?

内部JVM是否需要一些字符串,或者这是性能优势.如果有,怎么样?

java string pool

9
推荐指数
1
解决办法
3656
查看次数

提取大量的String文字是个好主意吗?

在我正在处理的遗留代码库中,有大量的String文字.其中很多都是重复的.例如,字符串"userID"用于500个地方.可能有一千种这样的文字以重复的方式使用.IntelliJ Idea静态代码分析表明我将它们提取为常量.如果IDE为我自动重构,没有我键入一行代码,我应该去吗?

通常,将许多这样的重复字符串文字提取为常量是一个好主意吗?这显然可以避免重复,提供单点访问,声明等.

但是,这些文字中的一些在访问时会出现.如果我将所有文字声明为常量(静态最终),那么所有这些文字将被加载在一起.在这种情况下,将所有这些文字声明为常量是一个好主意吗?你能提供一些指向垃圾收集的指针,在这种情况下的内存空间预防措施吗?在这种情况下使用的最佳做法是什么?

一些注意事项:我知道字符串文字被实习.所以我不会在最坏的情况下保存任何内存.此外,似乎jdk 7将这些字符串放在堆而不是permgen.我看到了夫妻 问题,像我,但觉得这是不同的.所以在这里发布.

谢谢

java string static-analysis memory-management constants

3
推荐指数
1
解决办法
206
查看次数

字符数组隐藏密码jdbc

我正在尝试在JDBC连接上实现最佳安全实践.我读到实现密码的最佳方法是使用字符数组而不是字符串,因为字符串在Java中是不可变的.

唯一的问题是,我在Java API中找不到任何支持隐藏类型密码的方法char[].

有什么建议?

        import java.awt.Dimension;
        import java.awt.GridLayout;
        import java.awt.Toolkit;
        import java.sql.Connection;
        import java.sql.DriverManager;
        import java.sql.ResultSet;
        import java.sql.Statement;

        import javax.swing.Box;
        import javax.swing.JFrame;
        import javax.swing.JPanel;
        import javax.swing.JPasswordField;
        import javax.swing.JTable;
        import javax.swing.JTextField;
        import javax.swing.JOptionPane;
        import javax.swing.JLabel;

public class DbConnect
{
    public static void main(String args[])
    {

        try
        {
                Class.forName("com.mysql.jdbc.Driver");
                Connection conn = null;
                Statement stmt = null;
                String username = "";
                String sPassword = "";
                char[] cPassword;


                JTextField usernameField = new JTextField(50);
                JPasswordField passwordField = new JPasswordField(20);

                JPanel loginPanel = …
Run Code Online (Sandbox Code Playgroud)

java arrays string connection jdbc

2
推荐指数
1
解决办法
1193
查看次数