반응형
회원가입시 접근 제한과 테스트 작성
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이 맞는지
}
}
반응형
'Server Programming > Spring Boot Full-Stack Programming' 카테고리의 다른 글
[스프링 풀스택 클론 코딩] 회원가입 페이지 만들기 (+ 부트스트랩, 자바스크립트, 롬복, 타임리프) (0) | 2022.08.26 |
---|---|
[스프링 풀스택 클론 코딩] 의존성 주입 방법 (0) | 2022.08.25 |
[스프링 풀스택 클론 코딩] JPA 즉시로딩과 지연로딩 (0) | 2022.08.24 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-2) 계정 도메인 (0) | 2022.08.24 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-1) 프로젝트 만들기 (0) | 2022.08.24 |