회원가입 : 컨트롤러
> 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로 테스트 해도 됨)
참고
'Dot Programming > Spring Clone' 카테고리의 다른 글
[스프링 웹앱 프로젝트 #6]회원가입 폼 서브밋 처리 (0) | 2020.11.05 |
---|---|
[스프링 웹앱 프로젝트 #5]회원 가입 폼 서브밋 검증 (0) | 2020.11.03 |
[스프링 웹앱 프로젝트 #4]회원 가입 뷰 (0) | 2020.11.03 |
[스프링 웹앱 프로젝트 #2]계정 도메인 생성 (0) | 2020.11.02 |
[스프링 웹앱 프로젝트 #1]스프링 프로젝트 생성 (0) | 2020.11.02 |