인프런 커뮤니티 질문&답변

박현철님의 프로필 이미지
박현철

작성한 질문수

스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션

컨트롤러에서 api/admin 으로 왔을 때 처리하는 원리가 궁금해요

작성

·

327

1

안녕하세요 초보 개발자 입니다. 강의 너무 잘 듣고 있어요! 궁금한 점이 있어서 질문 드립니다.

security 필터를 다 거치고 Controller에서 주소가 api/admin이면 Authentication객체의 role이 ADMIN인지 확인 한다고 하셨는데,

securityConfig의 antMatchers("/api/admin/**").hasRole("" + UserEnum.ADMIN) 이부분에서 설정 했다고 생각합니다.

궁금한 점이 꼭 Authentication객체에서 ADMIN을 가지고 있는 변수의 이름이 꼭 role이여야만 가능 한걸까요? security에서 api/admin이 나오면 Authentication객체 내부에서 role이란 이름을 가진 변수를 찾아보는 걸까요?

아니면 해당사항을 설정한 사항이 따로 있었을까요?

답변 감사합니다!

답변 2

0

최주호님의 프로필 이미지
최주호
지식공유자

변수이름이 role일 필요는 없습니다. 하지만, 그 변수의 값은 반드시 ROLE_형태로 들어가야 합니다.

저희가 설정한 것이 아니고, 시큐리티 내부적으로 처리되고 있습니다.

0

안녕하세요, 인프런 AI 인턴이에요.

컨트롤러에서 api/admin 주소로 요청이 들어왔을 때 처리하는 원리에 대해서 궁금하신 거죠?

Spring Security에서는 권한(Authority)을 확인하기 위해 Authentication 객체를 사용합니다. 이 객체는 현재 인증된 사용자와 관련된 정보를 담고 있는데, 그 중 하나가 사용자의 역할(Role) 정보입니다.

Spring Security에서는 hasRole() 메서드를 사용해서 사용자의 역할을 확인하고 요청을 허용합니다. hasRole() 메서드 안에는 사용자가 가져야 할 역할의 이름을 적어줍니다. 여기서는 “ADMIN” 역할을 가진 사용자를 확인하고 있습니다.

따라서, 컨트롤러에서 api/admin 주소로 요청이 들어왔을 때, Spring Security는 Authentication 객체 내부에서 사용자의 역할 정보를 확인하고, 해당 역할이 “ADMIN”인지 검사합니다.

명시적으로 Authentication 객체 내부의 변수 이름을 “role”이라고 명시한 것은 아니지만, Spring Security에서는 기본적으로 역할 정보를 “role”이라는 이름의 변수로 맵핑합니다. 따라서 “ADMIN” 역할을 가진 사용자는 Authentication 객체 내부의 “role” 변수에 “ADMIN” 값을 가지고 있어야만 해당 요청을 처리할 수 있습니다.

그리고, 이러한 역할 맵핑 정보는 SecurityConfig에서 설정합니다. 예를 들어, antMatchers(“/api/admin/**”).hasRole(“ADMIN”)와 같이 요청 패턴과 역할 정보를 맵핑하는 설정을 SecurityConfig에 추가해야 합니다.

자세한 내용은 Spring Security 문서나 강의에서 더 자세히 알아보실 수 있습니다.

추가적인 궁금한 사항이 있으면 언제든지 물어보세요!

박현철님의 프로필 이미지
박현철

작성한 질문수

질문하기