Cześć. Chciałem uzyskać trochę informacji odnośnie Spring Security oraz testów.
- Gdzie powinna znajdować się adnotacja
@PreAuthorize
? Nad metodą serwisu czy nad metodą kontrolera, która wystawia endpoint? Czytałem na internecie i są różne podejścia. - Posiadam w projekcie (który nie jest projektem na studia, stąd nie umieszczam tutaj kodu) klasę
SecurityConfiguration
, która definiuje bean'aSecurityFilterChain
, który z kolei definiuje autoryzację poprzezOauth2ResourceServer
z wykorzystaniemOpaqueToken
. Ponadto jest klasaAuthLogic
, która posiada metodęhasAccess()
i sprawdza odpowiednią rolę (ZWYKŁY_USER, ADMIN_USER).
W klasie ExampleSerwis
:
@PreAuthorize("@authorizationLogic.hasAccess(#xxx, #id)"
List<ExampleDto> findByExampleId(Long id) {
return repo.findById(id)
}
Ta metoda wołana oczywiście jest potem w kontrolerze.
W jaki sposób podejść do testowania takiej metody pod względem autoryzacji?
Myślałem o teście warstwy webowej. Przykładowy:
@Test
shouldFindExampleDtoById() throws Exception {
//mock method invocation
this.mockMvc.perform(get("/examples/{id}", EXAMPLE_ID).with(opaqueToken()).andExpect(status().isOk))
}
Czy taki test ma sens, skoro adnotacja @PreAuthorize
(z wywołaniem metody hasAccess()
z innego beana) jest na metodzie serwisowej. Ma ktoś doświadczenie w testowaniu takich przypadków?
Z góry dzięki za odpowiedź.