我正在使用需要实现简单登录系统的Vaadin 8和Spring Boot / Spring Data编写应用程序。我在PostgreSQL中有一个托管用户详细信息的表,并且登录时我想通过使用存储过程将密码检查移动到数据库端。
事情是,我有以下类来处理身份验证:
public class Authentication {
@Autowired
private JdbcTemplate jdbcTemplate;
public Boolean authenticate(String username, String password) {
String passwordCheck = "SELECT crypt(?, password) = password " +
"FROM usuaris " +
"WHERE usuari = ?;";
PreparedStatementCallback<Boolean> psCallback = (ps) -> {
ps.setString(1, password);
ps.setString(2, username);
return ps.execute();
};
return jdbcTemplate.execute(passwordCheck, psCallback);
}
}
在登录对话框中使用它,如下所示:
public class LoginDialog extends Window {
@Autowired
Authentication auth;
private void tryToLogIn() {
if (auth.authenticate(username.getValue(), password.getValue())) {
Notification.show("Login successful!", Notification.Type.HUMANIZED_MESSAGE);
} else {
Notification.show("Invalid credentials", Notification.Type.ERROR_MESSAGE);
}
}
}
当我尝试调试应用程序时,它会使用Autowired Authentication类在authenticate()方法中抛出NPE。
我尝试将Authentication类注释为@Component,@Autowiring一个setter而不是JdbcTemplate,并且一切都在失败。
有人知道我在这里可以缺少什么吗?
谢谢!
EDIT1:我已经检查了这个问题可能是重复的问题,并且我确保我没有将Authentication类创建为New。我也试过使用@Configurable注释,它仍然会抛出NPE。
我应该能够自动归类课程,为什么它仍然不起作用? 我忘了提到我试图在LoginDialog类中自动装配一个独立的JdbcTemplate,它仍然抛出一个NPE。