【发布时间】:2015-03-23 05:19:50
【问题描述】:
我的程序中有以下代码,在将其与 Maven 集成后,我正在运行 SonarQube 5 对其进行代码质量检查。
但是,Sonar 抱怨我应该记录或重新抛出此异常。
我在这里缺少什么?我还没有记录异常吗?
private boolean authenticate(User user) {
boolean validUser = false;
int validUserCount = 0;
try {
DataSource dataSource = (DataSource) getServletContext().getAttribute("dataSource");
validUserCount = new MasterDao(dataSource).getValidUserCount(user);
} catch (SQLException sqle) {
LOG.error("Exception while validating user credentials for user with username: " + user.getUsername() + " and pwd:" + user.getPwd());
LOG.error(sqle.getMessage());
}
if (validUserCount == 1) {
validUser = true;
}
return validUser;
}
【问题讨论】:
-
也许它抱怨你正在记录一条消息,而不是异常本身,这使你失去了异常的潜在有用堆栈跟踪。无论如何,您绝对应该在这里抛出异常并向用户发出问题信号,而不是像一切正常一样返回相同的东西,就好像用户凭据不正确一样。记录密码也绝对不是一个好主意:主要的安全问题。
-
您没有在一个语句中记录消息和异常。因此,其他日志条目可能位于服务器日志中的两条消息之间,隐藏了这两条消息的强连接。第一个日志语句可能会引发异常,隐藏第二个日志语句中包含的信息。
-
Sonar 有时会遇到像这里这样的 动态日志消息 的问题。请参阅Java-specific issue: SONARJAVA-3029。 2019 年解决。
标签: java maven exception-handling sonarqube sonarqube-5.0