Sprint Rest AuthenticationPrincipal возвращает customUser только с нулевыми значениями - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь получить текущего зарегистрированного пользователя (базовая авторизация) в бэкэнде 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

1 Ответ

0 голосов
/ 21 октября 2018

Я попытался отладить ваш код, но не смог найти проблему
@AuthenticationPrincipal.Обычно эта аннотация разрешается классом AuthenticationPrincipalArgumentResolver веб-аннотации Spring Security.Используя @EnableWebSecurity, вы автоматически добавите это в свою конфигурацию Spring MVC.Нужно больше отлаживать на AuthenticationPrincipalArgumentResolver, что в данный момент я предложу перейти с классом Authentication и получить ваш объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...