Sie können Spring Security auch verwenden, wenn Sie versuchen, die Authentifizierung mit Spring Boot zu implementieren. Spring Security verfügt über einen Mechanismus zur automatischen Authentifizierung, wenn Sie Elemente bei der Anmeldung festlegen. Grundsätzlich wird die Authentifizierung jedoch mit einem Satz von Benutzernamen und Kennwort durchgeführt. Ich werde schreiben, was zu tun ist, wenn Sie andere Elemente zur Authentifizierung hinzufügen möchten.
Fügen Sie authenticationProvider zu SecurityConfig hinzu. Legen Sie für authenticationProvider das später beschriebene eindeutig implementierte "AuthenticationProviderImpl" fest. Legen Sie außerdem authenticationProvider in configureGlobal fest.
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 muss unabhängig implementiert werden. Ich habe der Tabelle eine Statusspalte hinzugefügt, um anzuzeigen, dass Benutzer, die nicht "aktiv" sind, nicht authentifiziert werden.
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;
//Zusätzliche Bedingungen
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