[Spring Security] 액세스 권한 설정

건빈·2024년 2월 20일

스프링 시큐리티

 

- 버전

💻 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 권한을 가진 계정으로만 접속이 가능하도록 제한하는 기능이 정상 작동한다.

profile
백엔드 개발자 지망생

0개의 댓글