2017-12-29 31 views
-1

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?

Antwort

0

Ich denke, DaoAuthenticationProvider sollte Ihr Problem lösen. Wir müssen die Service-Instanz und den Passwort-Encoder bereitstellen.

Einmal konfiguriert, müssen wir es auf den AuthenticationManagerBuilder einstellen.

@Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
      auth.authenticationProvider(authProvider()); 
    } 

Referenz here

Verwandte Themen