Аутентификация равна нулю, несмотря на @WithMockUserJAVA

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

Сообщение Anonymous »

У меня есть этот контроллер, который извлекает данные аутентификации пользователя и распечатывает их.

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

@GetMapping("/get-role")
public ResponseEntity getRole(Authentication auth) {
String role = auth.getAuthorities().stream().findFirst().get().toString();
return ResponseEntity.ok(role);
}
Проблема возникла, когда я попытался написать модульный тест

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

@Test
@DisplayName("Test Role")
@WithMockUser (username = "user", roles = {"Admin"})
void testRole() throws Exception {
URI uri = new URI("/v1/me/get-role");
mockRequest
.perform(MockMvcRequestBuilders.get(uri))
.andExpect(MockMvcResultMatchers.status().isOk());
}
Ошибка гласит:

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

jakarta.servlet.ServletException:
Request processing failed:
java.lang.NullPointerException:
Cannot invoke "org.springframework.security.core.Authentication.getAuthorities()" because "auth" is null
Если вас интересует мой pom.xml, я включил следующее:

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

org.springframework.boot
spring-boot-starter-test
test


org.springframework.security
spring-security-test
test

Я также включил их в свой тестовый класс

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

@WebMvcTest(controllers = MyController.class)
@AutoConfigureMockMvc(addFilters = false)
@ContextConfiguration(classes = SecurityConfig.class)
@Import(MyController.class)
public class MyControllerTest {
// rest of code
}
Я пробовал много решений в Интернете, например

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

User mockUser = Mockito.mock(User.class);
Authentication authentication = Mockito.mock(UsernamePasswordAuthenticationToken.class);

Mockito.when(authentication.getPrincipal()).thenReturn(mockUser);
Mockito.when(authentication.getCredentials()).thenReturn("password");
Mockito.when(authentication.isAuthenticated()).thenReturn(true);
Mockito.when(authentication.getAuthorities()).thenReturn((Collection) List.of(new SimpleGrantedAuthority("Admin")));

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

mockRequest
.perform(MockMvcRequestBuilders
.get(uri)
.with(SecurityMockMvcRequestPostProcessors
.user("user")
.authorities(new SimpleGrantedAuthority("Admin"))))
.andExpect(MockMvcResultMatchers.status().isOk());
И это решение ниже дало мне другую ошибку

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

mockRequest
.perform(MockMvcRequestBuilders
.get(uri)
.with(SecurityMockMvcRequestPostProcessors.jwt()))
.andExpect(MockMvcResultMatchers.status().isOk());

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

java.lang.NoClassDefFoundError:
org/springframework/security/oauth2/server/resource/authentication/JwtGrantedAuthoritiesConverter
Если вам нужна дополнительная информация, оставьте комментарий.

Подробнее здесь: https://stackoverflow.com/questions/791 ... thmockuser
Ответить

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

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

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

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

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