spring-security SpringReact性安全测试不考虑@预授权

c86crjj0  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(170)

控制器被配置为使用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)

jhdbpxl9

jhdbpxl91#

@WebFluxTest不设置Spring安全性。最简单的方法是使用@SpringBootTest
或者,您可以参考此处的示例,创建自己的@TestConfiguration,从Spring安全层开始:SpringReact性安全测试不考虑@预授权
通过查看@WebFluxTest文档
可用于Spring WebFlux测试的注解,该测试关注Spring WebFlux组件。
它仅为WebFlux组件设计,即Spring安全层设计为未初始化。当您希望创建仅关于控制器层的单元测试时,这会很有帮助。它比使用@SpringBootTest快得多。
然而当你的测试需要一些更多的Spring托管上下文时,你可能需要考虑使用@SpringBootTest,或者创建一些配置来初始化那些东西。

相关问题