Ich verwende Spring-Sicherheit und Annotation, um Benutzer über Datenbank und Ldap zu authentifizieren. Im Detail, da Ldap das Abrufen von Attributen nicht erlaubt, überprüfe ich, ob Benutzer (eindeutiger Code) und Passwort korrekt sind, durch eine Ldap-Suche und benutze dann meine Datenbank, um Autoritäten zu laden. Also alle Benutzer in meiner Datenbank existieren in Ldap, aber wenn ein Benutzer in Ldap existiert und nicht in meiner Datenbank, zeige ich eine bestimmte Seite an. Dies ist der eigentliche Code:Spring-Sicherheitsauthentifizierung durch Datenbank mit benutzerdefiniertem Benutzer
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
@PropertySource(value = { "classpath:application.properties" })
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
AuthenticationConfiguration authenticationConfiguration;
@Configuration
protected static class AuthenticationConfiguration implements
AuthenticationProvider {
@Autowired
private UserServices userServices;
@Autowired
LdapServices ldapServices;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
String name = authentication.getName();
String password = authentication.getCredentials().toString();
boolean isFind = ldapServices.ldapSearch(name, password);
if (isFind){
com.domain.User user = userServices.getByUsersEnabled(name);
if (user!=null)
authorities.add(new SimpleGrantedAuthority("ROLE_"+user.getRole().getRole()));
return new UsernamePasswordAuthenticationToken(name, password, authorities);
}
else return null;
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
@Autowired
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationConfiguration);
}
...web services authentication
ich einfach Benutzer haben, und ich möchte einige Informationen wie Name/Vorname und E-Mail hinzuzufügen. Ich lese, dass ich UserDetails
und loadUserByUsername
von UserDetailsService
Schnittstelle implementieren muss, aber wie kann ich loadUserByUsername
mit meinem Code zusammenführen? Auf diese Weise kann ich den Namen und Nachnamen anstelle des Benutzercodes anzeigen.
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/17660666) –
Hallo @ProkashSarkar, danke für deine Antwort. Ich habe die Antwort bearbeitet und etwas Code hinzugefügt. Ich denke, es ist jetzt besser. –