apifox怎么测试带@PreAuthorize()注解的接口
时间: 2023-11-07 19:52:49 浏览: 43
如果你想测试带`@PreAuthorize()`注解的接口,你可以尝试以下步骤:
1. 在测试类或测试方法上添加`@WithMockUser`注解,模拟一个用户的身份信息,可以是符合要求的用户,或者是拥有访问权限的用户。
2. 执行测试方法,测试接口的访问情况。
例如,假设你有一个需要登录并且有ADMIN权限才能访问的接口:
```
@RestController
@RequestMapping("/api")
public class MyController {
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin")
public String adminOnly() {
return "Welcome, admin!";
}
}
```
你可以这样测试它:
```
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyControllerTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
@WithMockUser(roles = "ADMIN")
public void testAdminOnlySuccess() {
ResponseEntity<String> response = restTemplate.getForEntity("/api/admin", String.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isEqualTo("Welcome, admin!");
}
@Test
@WithMockUser(roles = "USER")
public void testAdminOnlyForbidden() {
ResponseEntity<String> response = restTemplate.getForEntity("/api/admin", String.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
}
}
```
第一个测试方法模拟了一个拥有ADMIN权限的用户,应该能够成功访问接口并返回"Welcome, admin!"。第二个测试方法模拟了一个只拥有USER权限的用户,应该不能够访问接口并返回FORBIDDEN状态码。
注意,`@WithMockUser`注解默认的用户名是"user",如果你的接口需要特定的用户名,可以通过`username`属性设置。