해결된 질문
작성
·
310
·
수정됨
0
/api/admin 요청 시 권한만을 체크하기 위해 id 와 role 만 있는 객체를 시큐리티세션에 저장했다고 하셨는데
만약 username 이나 email 이 필요한 경우라면 그 로직도 BasicAuthenticationFilter 를 상속받은 필터에서 doFilterInternal() 메서드 안에서 강제주입을 할때 username 과 eamil을 가져와서 시큐리티 세션에 강제주입하는건가요 ?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
네, 맞습니다. 만약 /api/admin
요청 시 사용자의 username
이나 email
과 같은 추가 정보가 필요하다면, BasicAuthenticationFilter
를 상속받은 커스텀 필터의 doFilterInternal()
메서드에서 해당 정보를 가져와서 Spring Security의 세션에 강제로 주입할 수 있습니다. 이를 통해 권한 검사뿐만 아니라 필요한 정보를 세션에서 사용할 수 있게 됩니다.
참고로 @WithMockUser
를 사용하여 테스트 환경에서는 특정 권한을 가진 가짜 사용자를 만들어 테스트를 수행할 수 있습니다. Spring Boot의 관련 문서에 나와 있는 예시를 살펴보면 테스트 코드에서 @WithMockUser(roles = "ADMIN")
어노테이션을 통해 ADMIN 역할을 가진 사용자를 테스트에 활용하는 것을 볼 수 있습니다.
Java 예시:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
@WebMvcTest(UserController.class)
class MySecurityTests {
@Autowired
private MockMvc mvc;
@Test
@WithMockUser(roles = "ADMIN")
void requestProtectedUrlWithUser() throws Exception {
this.mvc.perform(get("/"));
}
}
Kotlin 예시:
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
import org.springframework.security.test.context.support.WithMockUser
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
@WebMvcTest(UserController::class)
class MySecurityTests(@Autowired val mvc: MockMvc) {
@Test
@WithMockUser(roles = ["ADMIN"])
fun requestProtectedUrlWithUser() {
mvc.perform(MockMvcRequestBuilders.get("/"))
}
}
추가적으로 테스팅에 대한 더 자세한 정보는 Spring Boot와 Spring Security의 참고 문서를 확인하시면 됩니다.
- Spring Boot 테스팅 가이드: Spring Boot Reference Documentation
- Spring Security 테스팅 지원: Spring Security Reference Documentation