Vous pouvez également utiliser Spring Security lorsque vous essayez d'implémenter l'authentification avec Spring Boot. Spring Security dispose d'un mécanisme pour s'authentifier automatiquement si vous définissez des éléments lors de la connexion, mais il s'authentifie essentiellement avec un ensemble de nom d'utilisateur et de mot de passe. J'écrirai ce qu'il faut faire si vous souhaitez ajouter d'autres éléments pour l'authentification.
est utilisé pour obtenir l'utilisateur, nous allons donc en profiter et l'implémenter en plus. Cette fois, nous allons l'implémenter en utilisant
DaoAuthenticationProvider`. Je me réfère à l'article Vérifier les paramètres supplémentaires avec Spring Security.Ajoutez authenticationProvider à SecurityConfig. Pour authenticationProvider, définissez ʻAuthenticationProviderImpl` qui est implémenté indépendamment ultérieurement. Définissez également authenticationProvider dans configureGlobal.
SecurityConfig.java
@Autowired
private AuthenticationProviderImpl authenticationProvider;
@Autowired
public void configureGlobal(
AuthenticationManagerBuilder auth,
@Qualifier("userService") UserDetailsService userDetailsService,
PasswordEncoder passwordEncoder) throws Exception {
authenticationProvider.setUserDetailsService(userDetailsService);
authenticationProvider.setPasswordEncoder(passwordEncoder);
auth.eraseCredentials(true)
.authenticationProvider(authenticationProvider);
}
AuthenticationProvider à implémenter indépendamment. J'ai ajouté une colonne de statut à la table à l'authentification NG pour les utilisateurs qui ne sont pas «actifs».
AuthenticationProviderImpl.java
@Component
public class AuthenticationProviderImpl extends DaoAuthenticationProvider {
@Override
protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
super.additionalAuthenticationChecks(userDetails, authentication);
User user = (User) userDetails;
//Conditions additionnelles
if (!user.getStatus().equals("active")) {
throw new AccountStatusNotActiveException("Status is not active");
}
}
public static class AccountStatusNotActiveException extends AuthenticationException {
public AccountStatusNotActiveException(String message) {
super(message);
}
}
@Override
protected void doAfterPropertiesSet() {}
}
Recommended Posts