我想測試主頁控制器的Spring Security +彈簧引導檢查控制
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
我使用的是用戶名「用戶」和測試,通過默認密碼春天的安全,但@PreAuthorize不工作
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@PreAuthorize("hasRole('ADMIN')")
public class HomeControllerTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
@WithMockUser(username = "user", password = "test", roles = "ADMIN")
public void home() throws Exception {
String body = this.restTemplate.getForObject("/", String.class);
assertThat(body).isEqualTo("Hello World!");
}
}
結果
預期結果:
< 「[你好!世界]」>
實際結果:
< 「{」 時間戳 「:1501100448216,」 狀態 「:401,」 錯誤 「:」未經授權 「 」信息:全 認證才能訪問這個資源 「 」路徑「」「: 」/「}]」>
我缺少的東西?
您正在調用一個真正的控制器,所以使用'@ WithMockUser'幾乎是你這裏絕無僅有。這隻有在你直接調用控制器上的'home()'方法時纔有效。假設您有基本的身份驗證設置用於登錄,您應該根據您的請求發送憑據。你的測試用例中的'@ PreAuthorize'也無法實現。 –