스프링부트 1.3.0이 나오고 현재 개발중인 애플리케이션의 적용버전을 바로 업그레이드 했다.

스프링부트 1.2.6 에서 1.3.0 으로 변경사항은

  • 스프링 4.1 → 4.2.1

  • 스프링시큐리티 3 → 스프링시큐리티 4

    • thymeleaf-extra-springsecurity3 → thymeleaf-extra-springsecurity4

정도의 차이가 생기겠다.

현재 ViewTemplate로 타임리프Thymeleaf 를 사용중인데, 스프링시큐리티와 연동해서 사용자가 가진 권한에 따른 처리를 하기 위해서 thymeleaf-extra-springsecurity(<https://github.com/thymeleaf/thymeleaf-extras-springsecurity>) 를 추가적으로 사용한다.

3 버전에서 4 버전으로 변경되면서 권한을 가지고 있는지 체크하는 구문이 변경된 것으로 보인다. * 3 버전

<div sec:authorize="hasRole('ROLE_USER')"></div>
<div sec:authorize="hasAnyRole('ROLE_ADMIN', 'ROLE_MANAGER')></div>
  • 4 버전

<div sec:authorize="hasAuthority('ROLE_USER')"></div>
<div sec:authorize="hasAnyAuthority('ROLE_ADMIN', 'ROLE_MANAGER')></div>

Role이 Authority 로 변경된 듯 싶다. ㅡ_-)>

스프링시큐리티 설정에서 URL별 접근권한을 설정하는 부분에서 hasAuthority를 사용하고 있어서 혹시나 하고 써봤더니 적용된다. 스프링시큐리티 문서를 보니 hasRole 등 Role 을 접미사로 사용하는 메서드는 ROLE_이라고 하는 접두사를 사용한 권한을 체크하는 목적으로 사용하는 것으로 보인다.

흠…​ ㅡ_-)> ROLE_ 붙이기 싫어서 빼먹고 권한을 정의했는데, 4버전에서 먹통이 되는 현상을 발생시키다니…​

정리

스프링시큐리티 4 적용 후 hasRole이나 hasAnyRole이 적용되지 않는다면 권한에 ROLE_ 접미사를 붙였는지 확인해보자.

레퍼런스 문서를 보는게 제일 좋다.

참고


+ Recent posts