상똥이의 Back-End 공부방
[Board Project] 17. 로그인 페이지 만들기 본문
[1. 로그인 페이지 만들기]
1. 의존성 주입
(1) Spring Initializr에 들어가서 아래 의존성을 모두 더한다
- Spring Web, Spring Sequrity, Thymeleaf
- 주의할점! : 타임리프를 꼭 같이 넣어줘야 아래처럼 나온다
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:'
2. 화면 확인
- localhost:8080/articles 화면으로 이동하면 아래처럼 나온다
- 하지만 이 상태에서는 다른 페이지는 조회할 수 없다
[2. 로그인 기능 보완하기]
1. 루트패키지.config 디렉토리에 SequrityConfig를 생성
- Bean 컴포넌트 방식으로 표현
(1) 어노테이션 추가 : @Configuration
(2) return http : http반환
(3) .authorizeHttpRequests(auth->auth.anyRequest().permitAll()) : 모든 요구를 허용한다
(4) .formLogin() : 로그인 페이지
코드 (접은 글)
package com.fastcampus.projectboard.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
return http
.authorizeHttpRequests(auth->auth.anyRequest().permitAll())
.formLogin().and().build();
}
}
2. 페이지 확인
- 위와같이 코드를 작성하면 어느 페이지든 조회할 수 있다
게시판(게시판 페이지) | 로그인 (Please sign in) | 로그아웃 페이지(Confirm Log Out?) |
[3. 로그인 테스트 작성하기]
1. 테스트 파일 생성 : 컨트롤러 패키지 안에 AuthControllerTest클래스 생성
2. 어노테이션 삽입
- @WebMvcTest : AuthController와 연관된 웹 컴포넌트만 로드하고 테스트하기 위한 웹 레이어 테스트
- @DisplayName("View 컨트롤러 ")
3. MockMvc : 모의 MVC환경을 구성하여 HTTP요청을 만들어내 컨트롤러 엔드포인트 호출, 그 결과 검증
- @Autowired : MockMvc 인스턴스를 주입받음
4. 테스트 내용
- mvc.perform(get("/login")) : GET메소드를 사용해 요청을 "/login" 엔드포인트로 보냄
- andExpect("status().isOk()") : 응답 상태가 정상(200)인지 확인
- content().contentTypeCompatibleWith(MediaType.TEXT_THML) : 응답하는 컨텐츠 타입이 HTML인지 확인
- 테스트 통과
코드(접은 글)
package com.fastcampus.projectboard.controller;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@DisplayName("View 컨트롤러 - 인증")
@WebMvcTest
public class AuthControllerTest {
private final MockMvc mvc;
public AuthControllerTest(@Autowired MockMvc mvc) {
this.mvc=mvc;
}
@DisplayName("[view][GET] 로그인 페이지 - 정상 호출")
@Test
public void givenNothing_whenTryingLoggingIn_thenReturnsLoginView() throws Exception{
mvc.perform(get("/login"))
.andExpect(status().isOk())
.andExpect(content().contentTypeCompatibleWith(MediaType.TEXT_HTML));
}
}
'프로젝트 > 게시판 만들기' 카테고리의 다른 글
[Board Project] 19. 게시판 서비스 뷰에 기능 구현하기 (0) | 2023.11.05 |
---|---|
[Board Project] 15. 게시판 페이지 만들기(2) (Thymeleaf) (0) | 2023.10.25 |
[Board Project] 14. 게시판 페이지 만들기(1) (Thymleaf) (0) | 2023.10.24 |
[Board Project] 13. 뷰 엔드포인트 테스트 정의 (0) | 2023.10.23 |
[Board Project] 12. API 구현 (Query DSL, Spring data, JPA) (0) | 2023.10.21 |