I still get access denied, although my testing method is annotated using @WithMockUser. Why does this not work in the integration test? Everything is fine with the test with @WebAppConfiguration and MockMvc.
Testing Class:
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class FileUploadIntegrationTest { @Autowired private TestRestTemplate restTemplate; @MockBean private FileStorageService storageService; @Test public void classPathResourceTest() throws Exception { ClassPathResource resource = new ClassPathResource("/test/testFile.txt", getClass()); assertThat(resource.exists(), is(true)); } @Test @WithMockUser(username="tester",roles={"USER"}) public void shouldUploadFile() throws Exception { ClassPathResource resource = new ClassPathResource("/test/testFile.txt", getClass()); MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); map.add("file", resource); ResponseEntity<String> response = this.restTemplate.postForEntity("/files", map, String.class);
Controller Class:
@RestController @RequestMapping("/files") @PreAuthorize(value = "hasRole('ROLE_USER')") public class FileUploadController { private FileStorageService fileStorageService; private AuthenticationFacade authenticationFacade; @Autowired public FileUploadController(FileStorageService fileUploadService, AuthenticationFacade authenticationFacade) { this.fileStorageService = fileUploadService; this.authenticationFacade = authenticationFacade; } @ResponseBody @PostMapping public ResponseEntity<UUID> uploadFile(@RequestParam("file") MultipartFile file) { UUID uuid = this.fileStorageService.addFile(authenticationFacade.getAuthentication().getName(), file); if (uuid != null) return ResponseEntity.ok(uuid); else return (ResponseEntity<UUID>) ResponseEntity.badRequest(); } }
java spring spring-boot spring-security
Milso
source share