Ich möchte eine Benutzeranmeldung Verifikationsfunktion zu meiner Anwendung hinzufügen. Meine Website basiert auf einer anderen, die einen komplexen Hash verwendet, um das echte Passwort regulär zu transformieren und dann in der Datenbank zu speichern. Die regelmäßige erstellt ein Salz und speichern Sie es auf Benutzertabelle, wie folgt aus:Wie erhalten Benutzerdaten aus einer Datenbank in Spring Security JdbcAuthentication?
String salt = HashKit.generateSaltForSha256();
password = HashKit.sha256(salt + password);
user.setPassword(password).setSalt(salt).save();
Wenn der Benutzer anmeldet, wird die ursprüngliche Anwendung Salz aus der Datenbank wie diese:
User user = dao.find(username);
password = HashKit.sha256(user.getSalt() + password);
if (password.equels(user.getPassword())){ Login Success! }
Aber jetzt ich möchte Frühling Stiefel zu verwenden, dass die Anwendung neu zu schreiben, und verwenden Spring Security Login zu überprüfen, wie folgt aus:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DruidPlugin druidPlugin;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(druidPlugin.getDataSource())
.usersByUsernameQuery(
"select userName username, password, true from account where userName=?"
)
.authoritiesByUsernameQuery(
"select userName username, 'ROLE_USER' from account where userName=?"
)
.passwordEncoder(new PasswordEncoder() {
@Override
public String encode(CharSequence password) {
String salt = HashKit.generateSaltForSha256();
password = HashKit.sha256(salt + password);
return password.toString();
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return false;
}
});
}
}
Wie kann ich Benutzerdaten aus der Datenbank erhalten in PasswordEncoder
?