상똥이의 Back-End 공부방

[Board Project] 17. 로그인 페이지 만들기 본문

프로젝트/게시판 만들기

[Board Project] 17. 로그인 페이지 만들기

상똥백 2023. 11. 2. 07:37

[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));
    }
}