我的問題是我無法在測驗中測驗帶注釋的 Rest Endpoints 的基于角色的身份驗證。指定的角色似乎沒有區別
我在我的 REST 控制器上使用基于注釋的安全配置,如下所示:
@RestController
@RequestMapping("rest/person")
class PersonRestController(
private val securityService: SecurityService,
private val personService: PersonService,
) {
@GetMapping("/list")
@Secured(UserRole.Role.ROLE_COMPANY)
fun list(): List<Person> {
val companyId = securityService.currentUser.companyId
return personService.findByCompany(companyId)
}
}
在我的 Web 層測驗中,我使用@WebMvcTest了一個共享配置類,它提供了所有必需的 bean(我們有一些共享的例外處理程式和攔截器,我想用我的控制器進行測驗)
我的測驗如下所示:
@WebMvcTest(PersonRestController::class)
@Import(RestControllerTestConfig::class)
class GroupedScheduleRestControllerTest {
@Autowired
private lateinit var mvc: MockMvc
@MockBean
private lateinit var personService: PersonService
// This bean is provided by RestControllerTestConfig
@Autowired
private lateinit var someSharedService: SomeSharedService
@Test
@WithMockUser(value = "[email protected]")
fun testReturnsEmptyList() {
val response = mvc.perform(MockMvcRequestBuilders.get("/rest/person/list"))
response.andExpect(status().isOk)
.andExpect(jsonPath("$.length()").value(0))
}
}
現在我想添加一個單元測驗,以驗證只有具有該角色的用戶COMPANY才能訪問此端點 - 但我無法使其正常作業。當我添加 時,我的測驗總是通過WithMockUser,與我為角色傳遞的內容無關。當我洗掉 WithMockUser 時,它總是以 401 Unauthorized 失敗,因此似乎正在發生一些安全設定,但@Secured在我的 RestEndpoint 中似乎沒有效果。
我是否在這里缺少一些配置來通知@WebMvcTest從實體化的 RestController 中獲取安全注釋?
uj5u.com熱心網友回復:
好的,為了獲取 @Secured 注釋,我添加@EnableGlobalMethodSecurity(securedEnabled = true)到我的配置類中,它就像一個魅力??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/424110.html
