IDE: IntetlliJ Ultimate
Spring Boot: 3.3.0
JDK: 17
01. Whitelabel Error Page
CSRF Token 때문에 Whitelabel Error Page가 뜨는 것이라고 함.
02. CSRF Token
- Cross-Site Request Forgery (CSFR) 공격을 방지하기 위해 사용되는 보안 토큰임
- CSRF 공격은 사용자가 의도하지 않은 요청을 특정 웹 애플리케이션에 전송하도록 하는 공격
- 이를 통해 공격자는 사용자의 권한을 도용하여 악의적인 행동을 수행할 수 있음
03. CSFR 토큰 해제
💾 SecuritConfig.java
package org.example.photogram_re.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.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration // IoC
@EnableWebSecurity // 해당 파일로 시큐리티 활성화
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests((authorizeRequests) -> // 인증, 인가 설정
authorizeRequests
.requestMatchers("/", "/user/**", "/image/**", "/subscribe/**", "/comment/**", "/api/**").authenticated()
.anyRequest().permitAll()
)
.formLogin((formLogin) -> // 폼 기반 로그인 설정
formLogin
.loginPage("/auth/signin") // get
.loginProcessingUrl("/auth/signin") // post -> 스프링 시큐리티가 로그인 프로세스 진행
.defaultSuccessUrl("/")
)
.csrf((csrfConfig) -> // csrf 비활성화
csrfConfig.disable()
)
.build();
}
}
- `csrfConfig.disable()`: CSFR 보호를 비활성화함
- CSRF 공격을 방지하기 위한 설정임
- 개발이나 테스트 환경에서는 비활성화할 수 있지만, 운영 환경에서는 활성화하는 것이 보안상 안전함
- 테스트 중이라서 비활성화함
💾 auth/signup.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>page</title>
<link rel="stylesheet" th:href="@{/css/style.css}">
<link rel="stylesheet" th:href="@{https://pro.fontawesome.com/releases/v5.10.0/css/all.css}"
integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous" />
</head>
<body>
<div class="container">
<main class="loginMain">
<!--회원가입섹션-->
<section class="login">
<article class="login__form__container">
<!--회원가입 폼-->
<div class="login__form">
<!--로고-->
<h1><img th:src="@{/images/logo.jpg}" alt=""></h1>
<!--로고end-->
<!--회원가입 인풋-->
<form class="login__input" th:action="@{/auth/signup}" method="post">
<input type="text" name="username" placeholder="유저네임" required="required"/>
<input type="password" name="password" placeholder="패스워드" required="required"/>
<input type="email" name="email" placeholder="이메일" required="required"/>
<input type="text" name="name" placeholder="이름" required="required"/>
<button>가입</button>
</form>
<!--회원가입 인풋end-->
</div>
<!--회원가입 폼end-->
<!--계정이 있으신가요?-->
<div class="login__register">
<span>계정이 있으신가요?</span>
<a th:href="@{/auth/signin}">로그인</a>
</div>
<!--계정이 있으신가요?end-->
</article>
</section>
</main>
</div>
</body>
이지업클래스 [메타코딩] 스프링부트 SNS프로젝트 - 포토그램 만들기 강의 실습
참고
OpenAi. (2024) ChatGPT (version 3.5)[Large Language model]. https://chat.openai.com
300x250
'Framekwork > photogram' 카테고리의 다른 글
[스프링 부트 포토그램] 19강 인증 회원가입 - 완료 (0) | 2024.09.03 |
---|---|
[스프링 부트 포토그램] 18강 인증 회원가입 - User 모델 만들기 (0) | 2024.09.02 |
[스프링 부트 포토그램] 16강 인증 회원가입 - SecurityConfig 생성 (0) | 2024.08.22 |
[스프링 부트 포토그램] 11강 ~ 15강 Controller (데이터 전송, 응답, redirection) (0) | 2024.08.21 |
[스프링 부트 포토그램] 8강~ 10강 Controller (동작 방식, http, 쿼리스트링, 주소 변수 매핑) (0) | 2024.08.20 |