Почему аутентификация в моем контроллере равна нулю при использовании @WithMockUser в тесте?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему аутентификация в моем контроллере равна нулю при использовании @WithMockUser в тесте?

Сообщение Anonymous »

Вопрос:
У меня в контроллере есть следующий код:

Код: Выделить всё

@MessageMapping(MESSAGE_MAPPING)
public void sendVote(final RequestVoteDto vote, final Authentication authentication) {
final UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
voteService.createVote(vote, userDetails.getUsername());
}
А вот тест, который я использую:

Код: Выделить всё

@Test
@WithMockUser(username = "userTest")
@DisplayName("Send vote should be accessible for authorized user")
void testSendVote_shouldBeAccessibleForAuthorizedUser() throws Exception {
// test code here
}
Однако объект аутентификации в контроллере всегда имеет значение NULL, поэтому кажется, что @WithMockUser(username = "userTest") не работает как и ожидалось.
Почему это происходит и как это исправить?
Я создал специальную аннотацию @WithCustomAuthenticationPrincipal:< /p>

Код: Выделить всё

public class WithMockCustomUserSecurityContextFactory implements WithSecurityContextFactory {

@Override
public SecurityContext createSecurityContext(final WithCustomAuthenticationPrincipal customUser) {
final SecurityContext context = SecurityContextHolder.createEmptyContext();

final UserDetailsImpl userDetails = new UserDetailsImpl(
new User()
.setEmail(customUser.username())
.setPassword(customUser.password())
.setSecurityRole(customUser.role())
);

final UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());

context.setAuthentication(authentication);
return context;
}
}
Я также протестировал его с помощью следующего кода:

Код: Выделить всё

@Test
@WithCustomAuthenticationPrincipal(username = "user@example.com", password = "password", role = SecurityRole.ROLE_ADMIN)
void testAuthenticationIsNotNull() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
assertNotNull(authentication);
assertEquals("user@example.com", ((UserDetailsImpl) authentication.getPrincipal()).getUsername());
}
Тест пройден, но когда я применил свою аннотацию к «основному» тесту, ничего не изменилось — проверка подлинности по-прежнему равна нулю в контроллере.

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-the-test
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»