控制器被配置为使用SpringReact式安全性进行服务开发,并且为某些端点添加了@PreAuthorize
注解,以便只有满足要求的用户才能访问这些端点。
我注意到,在实现的测试运行期间,@PreAuthorize
注解没有运行,那么我还需要在下面的实现代码中做些什么来确认这一点吗?
测试如下:
@ExtendWith(MockitoExtension.class)
@WebFluxTest(ItemController.class)
class ItemControllerTest {
...
@Test
void testFailsWhenNotAuthorizedUserChangesItem() {
// Used with CustomUserDetails(long userId, String username, String password, Collection<? extends GrantedAuthority> authorities)
webTestClient.mutateWith(mockUser(new CustomUserDetails()))
.post()
.uri("URL")
.exchange()
.expectStatus().isForbidden();
}
控制器下方:
@PostMapping
@PreAuthorize("@itemRoleChecker.hasOwnerRole(authentication, #itemIdx)")
public Mono<ResponseEntity<ResponseDto>> updateItem(...) { ... }
(预期403,因为用户未授权,但返回了200)
1条答案
按热度按时间jhdbpxl91#
@WebFluxTest
不设置Spring安全性。最简单的方法是使用@SpringBootTest
。或者,您可以参考此处的示例,创建自己的
@TestConfiguration
,从Spring安全层开始:SpringReact性安全测试不考虑@预授权通过查看@WebFluxTest文档
可用于Spring WebFlux测试的注解,该测试仅关注Spring WebFlux组件。
它仅为WebFlux组件设计,即Spring安全层设计为未初始化。当您希望创建仅关于控制器层的单元测试时,这会很有帮助。它比使用
@SpringBootTest
快得多。然而当你的测试需要一些更多的Spring托管上下文时,你可能需要考虑使用
@SpringBootTest
,或者创建一些配置来初始化那些东西。