EDIT:Frühling Boot-Sicherheits-Codierung Passwort leicht
Die einfachste Art, wie ich gefunden:
@SuppressWarnings("deprecation")
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery(
"SELECT username, password, abilitazione FROM public.utenti WHERE username=?")
.passwordEncoder(passwordEncoder())
.authoritiesByUsernameQuery(
"SELECT username, ruolo FROM public.ruoli_utente WHERE username=?");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
//omitted for brevity
}
@Bean
public PasswordEncoder passwordEncoder(){
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
in meiner dao Klasse I Benutzer hinzufügen wie folgt aus:
public void addElement(Utente u) {
String password = u.getPassword();
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(password);
u.setPassword(hashedPassword);
jdbcTemplate.update("INSERT INTO public.utenti(username, password, abilitazione, email, nome, cognome) VALUES (?, ?, ?, ?, ?, ?)",
new Object[] {u.getUsername(), u.getPassword(), u.getAbilitazione(), u.getEmail(), u.getNome(), u.getCognome()});
}
Ich möchte das Passwort auf sehr einfache Weise verschlüsseln und entschlüsseln, egal ob es ein Nein ist t super sicher, es muss nur für meinen Zweck sicher sein. Also, in der Datenbank habe ich verschlüsselte Passwörter hinzugefügt. Wenn der Benutzer sich authentifizieren erkennt es das Passwort nicht, auch wenn ich es entschlüsseln. Ich habe es wie folgt aus:
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery(
"SELECT username, decode(password,'base64'), abilitazione FROM public.utenti WHERE username=?")
.authoritiesByUsernameQuery(
"SELECT username, ruolo FROM public.ruoli_utente WHERE username=?");
}
}
Es könnte auf ähnliche Weise arbeiten (Decodierung direkt in usersByUsernameQuery Verfahren), oder muss ich ein paar Bohnen für die Decodierung erklären?
Wie haben Sie Ihre Klasse UserDetailSecurityService? – tina
@tina hinzugefügt die 2 Klassen – cralfaro
Ich versuche zu verstehen, warum, was ich getan habe, hat nicht funktioniert. Sie haben einen Klassenbenutzerservice geschrieben (der sicherlich eine userdao-Klasse verwendet), die das tut, was die Methode configAuthentication in meiner Klasse tut. Warum also, wenn ich eine Dekodierungsfunktion in meinem SQL verwende, arbeitet in meiner DB, aber nicht im Projekt? Warum müssen Sie eine Methode verwenden, die das Kennwort aus der SQL-Abfrage codiert und entschlüsselt? – tina