Есть контроллер, задача которого - вернуть мне профиль пользователя с помощью REST API. Код далее:
@PostMapping("/me")
public UserProfileResponse getUserProfile(@AuthenticationPrincipal UserAuthenticationPrincipalModel user ) {
return userProfileService.getUserProfile(user.getUserId());
}
Я создал модель для сущности User. Класс сущности создается как:
public class User implements UserDetails { ... }
Модель имеет следующую структуру:
public class UserAuthenticationPrincipalModel extends User {
private String userId;
private String avatarUrl;
public UserAuthenticationPrincipalModel(***.********.entity.User user) {
super(user.getUsername(), user.getPassword(), user.isEnabled(), user.isAccountNonExpired(),
user.isCredentialsNonExpired(), user.isAccountNonLocked(), user.getAuthorities());
this.userId = user.getUserId();
this.avatarUrl = user.getUserPic();
}
// + equals and hashCode
}
В модели данные, которые я когда-либо (или пока планирую) вытащить из AuthPrincipal авторизованного пользователя. Согласно техническому заданию, я не могу использовать Принципала по умолчанию, даже не пробовал. Реализация UserDetailsService:
@Service
public class UserDetailsServiceImpl extends AbstractMySQLService<User, String, UserRepository> implements UserDetailsService {
private final UserRepository userRepository;
public UserDetailsServiceImpl(final UserRepository userRepository, final UserRepository repository) {
super(repository);
this.userRepository = userRepository;
}
@Override
public UserAuthenticationPrincipalModel loadUserByUsername(final String email) {
User user = userRepository.findByEmail(email);
if (user == null) {
throw new UsernameNotFoundException("Invalid username or user not e: " + email);
}
return new UserAuthenticationPrincipalModel(user);
}
}
Ошибка: Null всегда слетает в методы. Внесено много дополнений, которые рекомендуются для Baeldang и этого стека - ничего: (
Напишите, пожалуйста, комментарий, если нужно добавить дополнительную информацию.
UPD 1:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/ca/**").hasRole("COMPANY_ADMIN")
.antMatchers("/d/**").hasRole("DRIVER")
.antMatchers("/u/**").authenticated()
.antMatchers("/sign_up", "/oauth/token", "/swagger-ui.html", "/resources").permitAll();
}