-
스프링 시큐리티 요청 URI별 권한 처리할 때 문제상황 해결!프로그래밍/서버 프로그래밍 2019. 2. 19. 15:17
스프링 시큐리티 요청 URI별 권한 처리할 때 문제상황 해결!
스프링 시큐리티를 사용하는 프로젝트에서
/api/**
는authenticated()
로 처리하고,/api/accounts
로 들어오는POST
요청만permitAll()
처리를 해줬는데 이게 실제 테스트코드에서 계속해서 실패하는 이슈가 있었다.해당 코드는
@Override public void configure(HttpSecurity http) throws Exception { http.anonymous() .and() .authorizeRequests() .mvcMatchers("/api/**").authenticated() .mvcMatchers(HttpMethod.POST, "/api/accounts") .permitAll() .and() .exceptionHandling() .accessDeniedHandler(new OAuth2AccessDeniedHandler()); }
이렇게 작성되어 있었다. 하지만
/api/accounts
로POST
요청을 날릴때마다 권한이 없다는 에러가 발생하여서 검색결과, 스프링 공식 문서를 보면, 먼저 설정된 값이 우선순위를 가지고 있다는 것을 알게되었다.따라서 코드의 순서를 아래와 같이 바꾸어주었다.
@Override public void configure(HttpSecurity http) throws Exception { http.anonymous() .and() .authorizeRequests() .mvcMatchers(HttpMethod.POST, "/api/accounts") .permitAll() .mvcMatchers("/api/**").authenticated() .and() .exceptionHandling() .accessDeniedHandler(new OAuth2AccessDeniedHandler()); }
이렇게 바꾼뒤 테스트해 본 결과, 테스트를 통과하는 것을 확인할 수 있었다.
가끔가다 권한설정에서 이유없이 문제가 발생하여 다시 코드를 짜는 경험이 있었는데, 그것도 아마 이것과 같은 상황이었던 것 같다.
기억하자! 먼저 설정한 권한이 우선순위를 갖는다!
'프로그래밍 > 서버 프로그래밍' 카테고리의 다른 글
Travis CI를 이용해 Maven + SpringBoot에 CI 적용하기 (0) 2019.02.20 @Valid 에서 받은 Errors를 Serialize해서 ResponseEntity에 담자! (0) 2019.02.19 Spring boot 스프링 부트에서 request Validation 요청값 검증하기 (0) 2019.02.18 DTO란 (0) 2019.02.15 Spring Boot JPA 사용법 (0) 2018.12.20