我正在 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 从本