-
Notifications
You must be signed in to change notification settings - Fork 0
0.05_Security
Giuliano Ranauro edited this page Dec 3, 2024
·
1 revision
Stiamo attenti a taggare correttamente i campi e la classe.
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private String username;
private String password;
private String role;
// Getters and setters
}import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, String> {
User findByUsername(String username);
}@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
return User.withUsername(user.getUsername())
.password(user.getPassword())
.roles(user.getRole())
.build();
}
}Attenzione: il servizio implementa UserDetailsService; questa interfaccia richiede l'implementazione del metodo loadUserByUsername(String username) che verrà usata successivamente da SecurityConfig per caricare gli user e controllarne i valori.
In poche parole se la vede tutta VaadinWebSecurity ma noi dobbiamo implementare il metodo.
Nel package security creiamo la classe:
@EnableWebSecurity
@EnableMethodSecurity(jsr250Enabled = true)
@Configuration
public class SecurityConfig extends VaadinWebSecurity {
@Autowired
private CustomUserDetailsService customUserDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
setLoginView(http, LoginView.class);
}
@Bean
@Override
public UserDetailsService userDetailsService() {
return customUserDetailsService;
}
}La magia è fatta dal metodo sovrascritto userDetailsService che utilizza il servizio CustomUserDetailsService appena creato per recuperare le informazioni degli utenti dal database.