spring-mvc - 如何使用带有注释@PreAuthorize ("hasRole(' ADM

我正在 MVC Controller 上编写 Spring Cloud Contract 测试,其方法带有注释 @PreAuthorize("hasRole('ADMIN')")。我需要提供什么来传递方法的安全性? 我需要测试 Controller 的安全性。 在项目中使用 Oauth2 安全性。 我是初级开发人员(很多事情我还不知道),如果你能给我更多的答案就更好了。 谢谢。

我创建了基础测试类,其中在带有注释@Before 的 setup() 方法中提供了 mockMvc。

基础测试类具有如下形式:

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = AdminController.class)
@ContextConfiguration(classes = {AdminControllerTestConfig.class, TestConfig.class, AdminControllerTestProperty.class})
@ComponentScan(basePackageClasses = AdminController.class)
@TestPropertySource(locations = "/AdminControllerTest.properties")
@AutoConfigureStubRunner(workOffline = true)
public class AdminControllerContractBaseTest {
    //code
}

自动生成合约测试的设置方法

@Before
    public void setup() {
        Admin admin = createAdminUser();
        when(adminRepository.findOneByCredentialsId(id)).thenReturn(admin);
        RestAssuredMockMvc.standaloneSetup(new AdminController(adminService, credentialsService));
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .apply(springSecurity())
                .build();
    }

自动生成测试类的测试方法

    @Test
    public void shouldFindAdminUserById() {
    }

    @Test
    public void shouldNotFindAdminUserById() {
    }

    @Test
    public void userDoesNotLoggedIn() {
    }

我知道我没有提供任何关于登录用户安全的细节,但我没有找到关于如何在我的情况下进行契约(Contract)测试的信息。

我尝试在测试方法上设置注释 @WithMockUser(roles = "ADMIN") 但它不起作用。

也许我没有配置足够的通过测试? 顺便说一句,我有有权访问此 API 的用户的电子邮件和密码。

在根据契约(Contract)自动生成的方法测试中

ResponseOptions response = given().spec(request)                     
    .get("/api/admin/a") 

我希望在通过测试后响应代码 200 但实际代码是 401

最佳答案

您可能希望使用 @SpringBootTest 编写集成测试,而不是使用 Spring Cloud Contract 来测试您的安全性。 Spring Cloud Contract 的创建是为了验证您的通信层的输入和输出,并让您(生产者)知道您是否要破坏您的 API,以便其他人(消费者)在使用您公开的 API 时遇到问题。

请看这个sample关于如何在不启动整个应用程序上下文的情况下设置 Spring Cloud Contract 测试。

希望对您有所帮助! :)

关于spring-mvc - 如何使用带有注释@PreAuthorize ("hasRole(' ADMIN')") 的安全方法在 Controller 上进行 spring 云契约(Contract)测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989077/

相关文章:

google-chrome - 查找最新可用的 Chrome 版本(在 Linux 上,例如从 sh

android - 如何在 kotlin 中使用 http 请求将图像上传到服务器?

reactjs - 覆盖 MuiContainer 类时如何摆脱 Typescript 类型错误?

javascript - 错误 [prerender-spa-plugin] - 无法预呈现所有路线

java - Spring Boot + Yaml + @PropertySource + @Con

javascript - 是否可以禁用整个主体(包括内部 iFrame)的填写付款表格?

azure-sql-database - 是否可以在 Azure SQL 数据库中配置查询超时?

javascript - 无法加载资源:net::ERR_CONNECTION_REFUSED 从本

kubernetes - EKS - 如何注释 USERDATA 中的某些节点?

html - 如何在 HTML 中显示视频/mp2t?