💻 spring boot 3.1.8
💻 spring security 6.1.6
웹 환경에서 클라이언트가 접속하는 페이지마다 해당 권한을 가지고 통과해야만 하는 경우가 있다.
관리자 페이지는 관리자 권한을 가져야 접속할 수 있는 것처럼...
그래서 이전에는 아래 코드를 사용했었는데... 응...? .mvcMatchers 메서드가 import조차 되지 않는 듯 하다.
http.authorizeRequests()
.mvcMatchers(
"/bootstrap/**","/js/**","/css/**","/assets","/upload/**",
"/","/board/**","/members/**","/item/**"
)
.permitAll()
.mvcMatchers("/admin/**").hasRole("ADMIN")
.anyRequest()
.authenticated();
버전의 차이인 듯 싶어 자료를 찾아보고 .requestMatchers 메서드로 수정했다.
http.authorizeRequests()
.requestMatchers(
"/bootstrap/**","/js/**","/css/**","/assets","/upload/**",
"/","/board/**","/members/**","/item/**"
)
.permitAll()
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest()
.authenticated();
그런데 이제는 hasRole 메서드가 영 시원찮다ㅠㅠ
내 DB 테이블의 role 컬럼 내 데이터가 ADMIN인 관리자 계정으로도 "/admin/item/**" 의 URL로 접속이 되지가 않는다...
그래서 또 몇십분을 끙끙거리다가
.hasRole 메서드는 기본적으로 "ROLE_" 이라는 접두사를 필요로 한다는 것을 알았다.
그렇다면 내 DB 내의 데이터도 동일한 접두사가 붙어있어야 하는데, 이미 데이터는 "ADMIN"으로 저장되어있는 상태.
DB 내 데이터를 수정하는 건 지양하고자 .hasRole 메서드를 .hasAuthority 로 바꿔주었다.
http.authorizeRequests()
.requestMatchers(
"/bootstrap/**","/js/**","/css/**","/assets","/upload/**",
"/","/board/**","/members/**","/item/**","/imgs/**"
)
.permitAll()
.requestMatchers("/admin/**").hasAuthority("ADMIN")
.anyRequest()
.authenticated();
그 이후로는 "/admin/item/**" URL에 ADMIN 권한을 가진 계정으로만 접속이 가능하도록 제한하는 기능이 정상 작동한다.