Я пытаюсь добавить некоторые пользовательские данные для текущего пользователя, вошедшего в систему, поэтому я обнаружил, что могу реализовать свой собственный UserDetailsService и просто подключить его к Spring, но он никогда не вызывается, я всегда получаю Principal как просто строку имени пользователя.
У меня есть реализация UserDetailsService:
@Service
public class UserDetailServiceImpl implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
...
}
}
моя реализация UserDetails:
import org.springframework.security.core.userdetails.User;
public class LoggedInUser extends User {
...
}
и попытался установить его в конфигурации (SecurityConfiguration) несколькими способами:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationProvider customAuthProvider;
@Autowired
private UserDetailsService userDetailServiceImpl;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthProvider);
auth.userDetailsService(userDetailServiceImpl).passwordEncoder(passwordService.getPasswordEncoder());
}
...
}
или
@Autowired
protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthProvider);
auth.userDetailsService(userDetailServiceImpl).passwordEncoder(passwordService.getPasswordEncoder());
}
или
@Override
@Bean
public UserDetailsService userDetailsService() {
return new UserDetailServiceImpl();
}
и ничего не работает ... Я попытался получить информацию о пользователе несколькими способами:
- в контроллере с @AuthenticationPrincipal, где я получаю ноль
в службе (я получаю неверную ошибку приведения):
Аутентификация аутентификации = SecurityContextHolder.getContext (). GetAuthentication ();
(LoggedInUser) authentication.getPrincipal ()
Есть идеи, почему это не работает? Мой класс impl переопределяется по умолчанию в другом месте? Я пытался посмотреть в журналах (logging.level.org.springframework.security = TRACE), но не повезло: /
Я могу войти, это работает нормально, только основные данные всегда только имя пользователя String, а не мой класс.