본문 바로가기

Server Programming/Spring Boot Full-Stack Programming

[스프링 풀스택 클론 코딩 - 회원가입] (1-3) 회원가입 컨트롤러

반응형

회원가입시 접근 제한과 테스트 작성

 


SecurityConfig

//회원가입을 위한 시큐리티 수동 설정
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {

//    private final AccountService accountService;
//    private final DataSource dataSource;

    /**
     * Spring Security 5.7.x 부터 WebSecurityConfigurerAdapter 는 Deprecated.
     * -> SecurityFilterChain, WebSecurityCustomizer 를 상황에 따라 빈으로 등록해 사용한다.
     */
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    	//오버라이딩을 통해 원하는 요청은 시큐리티 체크를 하지 않도록 설정
        return http.authorizeRequests()
        		//모듈에서 걸러내야 하는 요청들 
                .mvcMatchers("/", "/login", "/sign-up", "/check-email", "/check-email-token",
                        "/email-login", "/check-email-login", "login-link").permitAll()
//                .mvcMatchers("/", "/login", "/sign-up", "/check-email", "/check-email-token",
//                        "/email-login", "/check-email-login", "login-link", "/profile/*").permitAll()
                //-> 프로필에 붙어있는 모든 요청은 get만 허용
                .mvcMatchers(HttpMethod.GET, "/profile/*").permitAll()
                
                //그외에 나머지 요청의 경우 모두 로그인이 필요하다.
                .anyRequest().authenticated()
                .and().build();
//                
//                .and()
//                .formLogin().loginPage("/login").permitAll()
//                
//                .and()
//                .logout().logoutSuccessUrl("/")
//                
//                .and()
//                .rememberMe().userDetailsService(accountService).tokenRepository(tokenRepository())
//		  		  .and().build();
//                
    }
    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring()
                .mvcMatchers("/node_modules/**")
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations());
    }

 

AccountControllerTest

//테스트를 위한 어노테이션 -> 스프링부트테스트, 자동설정목업 MVC
@SpringBootTest @AutoConfigureMockMvc
//사용하면 서블릿이 뜨고, @AutoConfigureWebClient  @AutoConfigureTestClient를 이용하면 테스트 가능 
//@SpringBootTest (webEnvironment =WebEnvironment.DEFINED_PORT)
//@SpringBootTest (webEnvironment =WebEnvironment.NONE)
//@SpringBootTest (webEnvironment =WebEnvironment.RANDOM_PORT)


class AccountControllerTest {
	//의존성 주입
	@Autowired private MockMvc mockMvc;

	@DisplayName("회원 가입 화면이 보이는지 테스트")
	@Test
	void signUpForm() throws Exception { //아래의 응답이 아닐경우 예외처리
		mockMvc.perform(get("/sign-up")) //회원가입 요청에서
		.andDo(print()) //실제 웹사이트 출력 -> 타임리프이기 때문에
		.andExpect(status().isOk()) //보이는지 -> 즉, 상태가 정상일때 (200일때)
		.andExpect(view().name("account/sign-up")); //뷰의 이름이 account/sign-up이 맞는지
		
	}

}

 

반응형