У меня есть метод
/**
* {@inheritDoc}
*/
@Override
public List<User> getInvitations() throws ResourceNotFoundException {
log.info("Called with outgoing {}", outgoing);
final String id = ((CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId();
return this.findUser(id).getSentInvitations()
.stream()
.map(ServiceUtils::toUserDto)
.collect(Collectors.toList());
}
Метод получает идентификатор вошедшего в систему пользователя во время работы.Перед выполнением теста он выполняет
@Before
public void setup() {
final Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
grantedAuthorities.add(new SimpleGrantedAuthority(SecurityRole.ROLE_USER.toString()));
Authentication authentication
= new UsernamePasswordAuthenticationToken(
new CustomUserDetails(
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
grantedAuthorities,
"1"
), null);
SecurityContext sc = SecurityContextHolder.getContext();
sc.setAuthentication(authentication);
}
, а я делаю тест
/**
* Test the getInvitations method.
*/
@Test
public void canGetInvitations() {
final String id = "1";
final UserEntity entity = Mockito.mock(UserEntity.class);
Mockito
.when(this.userRepository.findByUniqueIdAndEnabledTrue(id))
.thenReturn(Optional.of(entity));
Assert.assertTrue(this.userSearchService.getInvitations().isEmpty());
}
Однако оказывается, что ((CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId();
вернул null
, хотя id
Я дал 1
в @Before
.
Почему я не могу правильно настроить авторизованного пользователя в Spring Security?