본문 바로가기

Dot Programming/Spring Clone

[스프링 웹앱 프로젝트 #3]회원 가입 컨트롤러

회원가입 : 컨트롤러
> GET "/sign-up" 요청을 받아서 account/sign-up.html  페이지 보여준다.
> 회원 가입 폼에서 입력 받을 수 있는 정보를 "닉네임", "이메일", "패스워드" 폼 객체로 제공한다.

 

백엔드 로직 작성

AccountController.java

@Controller
public class AccountController {

    @GetMapping("/sign-up")
    public String signUpForm(Model model){

        return "account/sign-up";
    }

}

 

String 반환값은 springboot가 제공하는 자동 설정에 의해 template 디렉토리 밑에서 부터 찾음

(@RestController는 String값 반환으로 안됨. 내가 아는 방법은 HttpHeaders에 uri를 설정해서 내보내면 된다.)

 

 

이대로 실행하면 Spring Securiy로 인해 /login에서 막힌다. 그러므로 SecurityConfig설정을 해야한다.

 

SecurityConfig.java

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .mvcMatchers("/", "/login", "/sign-up", "/check-email", "/check-email-token",
                        "/email-login", "/check-email-login", "/login-link").permitAll()
                .mvcMatchers(HttpMethod.GET, "/profile/*").permitAll()
                .anyRequest().authenticated();


    }
}

 

 

해당 경로는 인증이 필요없이 누구나 접근이 가능하고, /profile/*은 get메소드만 접근이 가능하게 설정했다.

 

 

테스트 코드 작성

/sign-up경로가 열렸으므로 이를 테스트코드로 한번 더 테스트해보자.

@SpringBootTest
@AutoConfigureMockMvc  //view까지 테스트 가능 (webenviroment 설정하면)
class AccountControllerTest {

    @Autowired
    private MockMvc mockMvc;


    @DisplayName("회원 가입 화면 보이는지 테스트")
    @Test
    public void signUpForm() throws Exception{
        mockMvc.perform(get("/sign-up"))
                .andExpect(status().isOk())
                .andExpect(view().name("account/sign-up"));

     }

}

 

테스트 성공

(SecurityConfig에서 접근권한을 다시 막으면 403 접근 권한 에러 발생)

@SpringBootTest(webEnviromnet = Random_port || Defined_port)로 설정하면 servlet이 실제로 뜸
(MockMvc나  WebClient , WebTestClient로 테스트 해도 됨)

 

 


참고

인프런 강의 - 스프링과 JPA 기반 웹 애플리케이션 개발