PsUserDetailsService.java

package de.mirkosertic.powerstaff.auth;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class PsUserDetailsService implements UserDetailsService {

    private final PsUserRepository repository;

    public PsUserDetailsService(final PsUserRepository repository) {
        this.repository = repository;
    }

    @Override
    public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {
        final PsUser user = repository.findById(username)
                .orElseThrow(() -> new UsernameNotFoundException("Benutzer nicht gefunden: " + username));
        final User.UserBuilder builder = User.builder()
                .username(user.getUsername())
                .password(user.getPasswordHash())
                .disabled(!user.isEnabled());
        if (user.isAdmin()) {
            builder.roles("USER", "ADMIN");
        } else {
            builder.roles("USER");
        }
        return builder.build();
    }
}