Я пытаюсь получить текущего зарегистрированного пользователя (базовая авторизация) в бэкэнде REST с весенней загрузкой:
@RequestMapping(value = "/someURL", method = RequestMethod.GET)
public @ResponseBody Map someMethod(
Authentication auth, // <==== works
@AuthenticationPrincipal(expression = "liquidoUserModel") UserModel liquidoUserModel
)
{
log.debug(auth.getPrincipal()) // <==== THIS WORKS
log.debug(liquidoUserModel) // <==== returns an intance with empty fields
}
Вот мой пользовательский UserModel
@Data // Lombok magic for all the getters and setters
@Entity
@RequiredArgsConstructor
@Table(name = "users")
public class UserModel {
@Id
Long id;
@NonNull
@Column(unique = true)
public String email;
[...]
}
И это мой UserDetailsService
public class LiquidoUserDetailsService implements UserDetailsService {
@Autowired
UserRepo userRepo;
@Override
public LiquidoAuthUser loadUserByUsername(String email) throws UsernameNotFoundException {
UserModel userModel = userRepo.findByEmail(email);
return new LiquidoAuthUser(userModel.getEmail(), userModel.getPasswordHash(), getGrantedAuthorities(userModel), userModel);
}
}
И, наконец, LiquidoAuthUser
public class LiquidoAuthUser extends User {
private UserModel liquidoUserModel;
public LiquidoAuthUser(String username, String password, Collection<? extends GrantedAuthority> authorities, UserModel liquidoUserModel) {
super(username, password, authorities);
this.liquidoUserModel = liquidoUserModel;
}
public UserModel getLiquidoUserModel() {
return liquidoUserModel;
}
public void setLiquidoUserModel(UserModel userModel) {
this.liquidoUserModel = userModel;
}
}
И, конечно, у меня есть @EnableWebMvcаннотации к моему основному классу SpringApplication.
Моя проблема: Как я могу получить аутентифицированную пользовательскую пользовательскую модель в обработчике REST, прошедшую аутентификацию?
Странная вещь: я действительно могу получитьмой пользовательский пользователь из объекта аутентификации Authentication.Почему @AuthenticationPrincipal не работает?
Я использую spring-security-4.1.3-RELEASE
Полный код с открытым исходным кодом на https://github.com/Doogiemuc/liquido-backend-spring