Я пытаюсь сохранить дополнительные данные в главном объекте пользователя.
Что я сделал:
реализовать интерфейс UserDetails для моего существующего класса пользователя, где сохраняются мои дополнительные данные (например, адрес электронной почты и т.д.).
@Entity
public class User implements UserDetails {
Затем я создал реализацию UserDetailsService:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserDAO userDAO;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userDAO.findOneByUsername(username);
if (user == null)
throw new UsernameNotFoundException("username " + username
+ " not found");
System.out.println("---------------------> FOUND ------------->"
+ user.getEmail());
return user;
}
}
Последний шаг состоял в том, чтобы добавить UserDetailsService в мою конфигурацию безопасности.
@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService());
// ...
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.userDetailsService(userDetailsService());
// ...
}
@Override
protected UserDetailsService userDetailsService() {
return userDetailsService;
}
В моей консоли видно, что "loadUserByName" вызывается дважды (из-за вывода "Found" ).
Когда я пытаюсь получить доступ к основному объекту в моем контроллере →
System.out.println(SecurityContextHolder.getContext()
.getAuthentication().getPrincipal());
Я не получаю дополнительные данные. Когда я пытаюсь передать его в свой объект User, я получаю, что он не может отличать исключение.
Есть ли что-то, чего я не вижу?
Спасибо заранее.