Ya ben bir şey eksik veya nasıl çalıştığını bu ... Yani
, ben UserDetailsService
uygulanan ve alt-tabaka (AppUser
aşağıda) yay yardımcı sınıf User
(yani UserDetails
uygulayan). Bu konularda, bu böyle şeyler: SonraYay güvenliği, başarısız oturum açmada UserDetails yerine asıl dize olarak döndürüyor?
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
// try loading user by its name
SystemUser user = null;
try {
user = this.sysUserService.getByUsername(username);
if(user == null)
throw new UsernameNotFoundException("User not found!");
}
catch(Exception e) {
throw new DataRetrievalFailureException(
"Could not load user with username: " + username);
}
// load user rights, and create UserDetails instance
UserDetails res = new AppUser(user, getUserAuthorities(user));
return res;
}
Ben bu yaklaşımı kullanarak hesap kilitleme uygulamaya çalışmıştır: den asıl nesneyi almaya çalışırken Ancak
public class LoginFailureEventListenter implements
ApplicationListener<AuthenticationFailureBadCredentialsEvent> {
// rest omitted for brevity
@Override
public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent event) {
// ...
SystemUser user = ((AppUser)event.getAuthentication().getPrincipal()).getSystemUser();
// cast exception - how is it possible to obtain String
// instead of UserDetails object here ?
// ...
}
}
, ben java.lang.ClassCastException
koştu sağlanan olay argümanı (asıl nesne tür String
idi). Demek istediğim, Tamam - Ben sorunu çözmek için, tekrar SystemUser
benim kullanıcı adı yükleyebilirim, ama ben bunu beklemiyordum ...
Bu belge için bile kaynak belgelerinin bile getPrincipal()
UserDetails
örneğini döndürmesi gerektiğini belirtiyor.
Düşünceler?
Yani, bu aslında olması gerektiği gibi ...? Ben zaten sıfırlama için 'AuthenticationSuccessHandler' kullanıyorum, bu doğru yaklaşım olup olmadığını söyleyemem, 'AuthenticationFailureHandler' ile denemek için bana gelmedi. – Less
Evet, böyle olması gerekiyordu. Etkinlik "bu başarısız olan kimlik doğrulama isteği" diyor ve kimlik doğrulama isteği yalnızca kullanıcı için bir dize tanımlayıcısı içeriyor. –