[SPRING] 스프링 부트 2, 스프링 시큐리티 5 및 @WithMockUser
SPRING스프링 부트 2, 스프링 시큐리티 5 및 @WithMockUser
1.x에서 스프링 부트 2.0.5로 마이그레이션 했으므로 보안을 비활성화 할 필요가 없으므로 모의 MVC 테스트에서 테스트 역할을 수행 할 수 없습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationsControllerShould {
...
@Autowired
private MockMvc mockMvc;
private ObjectMapper mapper = new ObjectMapper();
@Test
@WithMockUser(roles = "ADMIN")
public void handle_CRUD_for_applications() throws Exception {
Application app = Application.builder()
.code(APP_CODE).name(APP_NAME)
.build();
mockMvc.perform(post("/applications")
.accept(MediaType.APPLICATION_JSON_UTF8)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(mapper.writeValueAsString(app)))
.andExpect(authenticated())
.andExpect(status().isOk()); // failure 403!
...
내 컨트롤러 끝 점이 보호되지 않습니다.
@RestController
@RequestMapping("/applications")
public class ApplicationsController {
...
@PostMapping
public Application addApplication(@RequestBody Application application) {
Assert.isTrue(!applicationsDao.existsById(application.getCode()), "Application code already exists: " + application.getCode());
return applicationsDao.save(application);
}
}
그래서 (@WithMockUser가 주석 처리 될 때 #authenticated가 실패한) 세션과 (ROLE_ADMIN이 추적에서 볼 수있는) 역할에 대한 테스트가 있지만, 요청이 거절되고 내가 잘못한 것을 이해하지 못합니다. 어떤 생각을위한 Thx!
해결법
-
==============================
1.Ok ... 좋은 오래된 CSRF 물건, 그때 ...
Ok ... 좋은 오래된 CSRF 물건, 그때 ...
logging.level.org.springframework.security=DEBUG
2018-10-02 10 : 11 : 41.285 DEBUG 12992 --- [주] o.s.security.web.csrf.CsrfFilter : http : // localhost / applications / foo에 유효하지 않은 CSRF 토큰이 있습니다.
Application app = Application.builder() .code(APP_CODE).name(APP_NAME) .build(); mockMvc.perform(post("/applications").with(csrf()) // oups... .accept(MediaType.APPLICATION_JSON_UTF8) .contentType(MediaType.APPLICATION_JSON_UTF8) .content(mapper.writeValueAsString(app))) .andExpect(authenticated()) .andExpect(status().isOk()); // there we go!
from https://stackoverflow.com/questions/52604164/spring-boot-2-spring-security-5-and-withmockuser by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트가 작동하지 않는 @AuthenticationPrincipal (0) | 2019.05.20 |
---|---|
[SPRING] 사용자 이름과 원격 IP 주소에 따라 다른 AuthenticationProvider 사용 (0) | 2019.05.20 |
[SPRING] SOAP 보안 헤더에서 X509Certificate 가져 오기 (0) | 2019.05.20 |
[SPRING] Spring 부팅을 사용하여 현재 활성 프로필을 프로그래밍 방식으로 확인하는 방법 [duplicate] (0) | 2019.05.20 |
[SPRING] AspectJ : 사용자 정의 * .aj 파일이 무시됩니다. (0) | 2019.05.20 |