Security Test

Byung Seon Kang·2022년 7월 12일
0

스프링 시큐리티

목록 보기
1/3
  • 유저가 로그인한 상태를 가정하고 테스트해야함.
  • spring-securty-test를 사용해서 테스트 직전에 Mock User를 인증시켜놓고 테스트 구동 가능.
    • 우선 의존성 추가해주기.
      //security 추가했으면 자동으로 되어있을 것.
      testImplementation 'org.springframework.security:spring-security-test'

@WithMockUser

  • 가짜 User 생성하고 Authentication 인스턴스 생성.
  • 여기서 User 는 org.springframework.security.core.userdetails.User를 말함. 멤버변수
    • role
      • 권한. ROLE_ 자동으로 붙음
    • authorities
      • 권한. 사용하면 roles 무시
    • username
      • 유저명
    • password
      • password
    • setUpBefore
      • 언제 세팅될지 정한다.
        TestExecutionEvent.TEST_METHOD
        TestExecutionEvent.TEST_EXECUTION
  • 여기서 주의할 점은 WithMockUser는 org.springframework.security.core.userdetails.User를 만들어 주지만, 우리에게 필요한 User는 우리가 만든 custom User.
    • class cast 에러 발생 가능.

@WithUserDetails

  • WithMockUser와 마찬가지로 Mock(가짜) User를 생성하고 Authentication을 만든다.
  • 차이점
    • 가짜 User를 가져올 때 UserDetailsService의 Bean 이름을 넣어줘서 userDetailsService.loadUserByUsername(String username)을 통해 User를 가져온다

멤버변수

  • value
    • 가져올 user의 username
  • userDetailsServiceBeanName
    • UserDetailsService를 구현한 Bean의 이름
  • setupBefore
    • 언제 유저가 세팅되는지 정함

@WithAnonymousUser

  • WithMockUser와 동일하지만 인증된 유저 대신에 익명(Anonymous)유저를 Authentication에서 사용한다.
  • 익명이기 때문에 멤버변수에 유저와 관련된 값이 없다

멤버변수

  • setupBefore

@WithSecurityContext

  • 다른 방식들은 Authentication을 가짜로 만들었다고 한다면 WithSecurityContext는 아예 SecurityContext를 만듭니다.
  • 멤버변수
    • factory
    • setupBefore

.with(user( ))

  • 다른 방식은 어노테이션 기반인 반면에 이 방식은 직접 User를 MockMvc에 주입하는 방법.
  • WithMockUser와 마찬가지로 유저를 생성해서 Principal에 넣고 Authentication을 생성해줌.
  • org.springframework.security.test.web.servlet.request.user를 사용.
    mockMvc.perform(get("/admin").with(user(user)))

반드시 해줘야하는 설정.

@BeforEach
public void setup() {
    mockMvc = MockMvcBuilders
            .webAppContextSetup(context) 
            .apply(springSecurity()) -> 요거.
            .build();
}
  • Spring Security를 Spring MVC 테스트와 통합할 때 필요한 모든 초기 세팅을 수행한다.

참고

  • 패스트캠퍼스 - 한 번에 끝내는 Spring 완.전.판 초격차 패키지 online.
  • tecoble
profile
왜 필요한지 질문하기

0개의 댓글