Ich versuche, zusätzliche Daten in de Benutzerprinzipalobjekt zu speichern.Spring Security benutzerdefinierte UserDetailsService und benutzerdefinierte Benutzerklasse
Was ich tat, war:
Umsetzung der „Userdetails“ Schnittstelle zu meiner bestehenden Benutzerklasse, wo meine zusätzlichen Daten gespeichert werden (wie E-Mail-Adresse etc.).
@Entity
public class User implements UserDetails {
Dann habe ich eine UserDetailsService Implementierung:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserDAO userDAO;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userDAO.findOneByUsername(username);
if (user == null)
throw new UsernameNotFoundException("username " + username
+ " not found");
System.out.println("---------------------> FOUND ------------->"
+ user.getEmail());
return user;
}
}
Der letzte Schritt war die UserDetailsService in meiner Security-Konfiguration hinzuzufügen.
Ich sehe in meiner Konsole, dass "loadUserByName" zweimal aufgerufen wird (wegen der "Found" -Ausgabe).
Wenn ich versuche, die Hauptaufgabe in meinem Controller zugreifen ->
System.out.println(SecurityContextHolder.getContext()
.getAuthentication().getPrincipal());
ich meine zusätzlichen Daten nicht bekommen. Wenn ich versuche, es auf mein Benutzerobjekt zu werfen, erhalte ich eine Exception nicht.
Gibt es etwas, was ich vermisse?
Vielen Dank im Voraus.
Das änderte nichts. BTW. Ihr letzter Codeausschnitt gibt mir: "java.lang.ClassCastException: org.springframework.security.core.userdetails.User kann nicht in .......... CustomUserDetails" – jvecsei
können Sie debuggen Ihre App und sagen Welche Klasse liefert 'SecurityContextHolder.getContext(). getAuthentication(). getPrincipal()'? –
class org.springframework.security.core.userdetails.Benutzer – jvecsei