try {
Class.forName(driver);
con = DriverManager.getConnection(url + db, user, pass);
PreparedStatement st = con.prepareStatement(
"INSERT INTO menu(menu.menuID,menu.name,menu.info,menu.price) values(?,?,?,?)");
st.setString(1, value1);
st.setString(2, value2);
st.setString(3, value3);
st.setString(4, value4);
st.executeUpdate();
JOptionPane.showMessageDialog(p1, "Data is successfully inserted into database.");
con.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(p1,
"Error in submitting data!");
}
我运行了FindBugs,这就是第3行的错误:
中的硬编码常量数据库密码
ie.lyit.flight.Changeadd$3.actionPerformed(ActionEvent)
此代码使用硬编码的常量密码创建数据库连接。任何有权访问源代码或编译代码的人都可以轻松学习密码。
等级:可怕(7),自信:正常 模式:DMI_CONSTANT_DB_PASSWORD 类型:Dm,类别:安全(安全)
我想知道是否有人知道如何摆脱这个错误以及我将如何去做呢?
答案 0 :(得分:0)
代码分析工具检查代码中的任何循环希望以及寻找最佳实践(或违反它们)。
在开发过程中,您可以忽略此类警告,但是,一旦您完成了业务逻辑,最好采用最佳实践 - 在这种情况下,从配置或属性文件中读取密码。
答案 1 :(得分:0)
如果您使用jtd连接数据库,则无需为连接提供用户名和密码。请尝试以下代码 -
Connection conn = null;
String url = "jdbc:jtds:sqlserver://" +serverName+ "/" +"master";
String driver = "net.sourceforge.jtds.jdbc.Driver";
Class.forName(driver);
conn = DriverManager.getConnection(url);
在我的情况下,master是数据库名称。只需用你的替换它。
答案 2 :(得分:0)
这只是告诉您密码不应直接存储在应用程序的源代码中,因为密码通常是共享的而不是加密的。 使用一些外部源代码,甚至更好的是不存储任何密码,只存储密码哈希值。
你也可以看一下: