IDE: IntetlliJ Ultimate
Spring Boot: 3.3.0
JDK: 17
01. 인증 구현
- 시큐리티 세팅
- 회원가입 구현
- 로그인 구현
- 회원정보 수정 구현
02. http://localhost:8080 진입 시
03. Spring Security
Java 기반의 Spring Framework에서 제공하는 보안 프레임워크로, Web Application과 API에 대한 인증(Authentication) 및 권한 부여(Authorization) 기능을 제공하여, 애플리케이션을 안전하게 보호하는 데 사용됨
1. 인증 (Authentication)
- 사용자의 신원을 확인하는 과정
- 사용자가 올바른 자격 증명 (예: 사용자 이름과 비밀번호, OAuth 토큰 등)을 제공했는지 확인함
- 폼 기반 로그인, HTTP 기본 인증, OAuth2, OpenID Connect 등
2. 권한 부여 (Authorization)
- 인증된 사용자가 어떤 자원에 접근할 수 있는지 결정하는 과정
- 사용자가 특정 페이지나 API 엔드포인트에 접근할 수 있는지 확인함
- 역할 기반 접근 제어(Role-Based Access Control, RBAC)를 지원함
- "ADMIN" 역할을 가진 사용자만 특정 관리자 페이지에 접근할 수 있도록 설정할 수 있음
3. 보안 필터 (Security Filters)
- Spring Security는 여러 보안 필터를 사용하여 HTTP 요청을 보호함
- CSRF(Cross-Site Request Forgery) 보호, CORS(Cross-Origin Resource Sharing) 제어 등을 포함
- 애플리케이션의 모든 HTTP 요청을 검사하여, 보안 위협으로부터 보호함
4. 세션 관리 (Session Management)
- 세션 고정 공격(Session Fixation Attack) 방지, 동시 세션 제어, 세션 만료 등 세션과 관련된 보안 기능을 제공함
5. 암호화 (Encryption)
- 비밀번호 암호화 및 인증 관련 데이터를 안전하게 처리하는 데 필요한 다양한 암호화 메커니즘 제공
04. SecurityConfig.java
Spring Security를 사용하여, 애플리케이션의 보안 설정을 정의하는 클래스 파일로 애플리케이션의 인증, 권한 부여, 세션 관리 등의 보안 관련 설정을 구성할 수 있음
- 인증 및 권한 부여 설정
- 어떤 URL 패턴에 대해 인증이 필요한지, 어떤 사용자 역할(role)이 어떤 URL에 접근할 수 있는지를 설정함
- 사용자 정의 인증
- 사용자 정의 `UserDetailsService`를 설정하여 사용자 정보를 로드하고, `PasswordEncoder`를 통해 비밀번호를 암호화하는 등의 설정을 함
- 보안 필터 체인 설정
- HTTP 요청을 필터링하고 처리하는 보안 필터를 설정함. 기본 제공 필터 외에도 사용자 정의 필터를 추가할 수 있음
- 세션 관리 및 CSRF 보호
- 세션 관리 전략 및 CSRF(Cross-Site Request Forgery) 보호 설정을 정의함
💾 config > SecurityConfig.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("/")
)
.build();
}
}
> 애노테이션
- `@Configuration`
- Spring Framework에서 사용하는 애노테이션 중 하나
- 클래스를 Spring의 설정 클래스(또는 설정 빈)으로 표시함
- 이 애노테이션이 붙은 클래스는 Spring 컨테이너에 의해 관리되며, 주로 애플리케이션 설정을 정의하는 데 사용됨
- `@EnableWebSecurity`
- Spring Security의 핵심 애노테이션
- Spring Boot 애플리케이션에서 웹 보안을 활성화하는 역할을 함
- 이 애노테이션을 사용하면 Spring Security의 웹 보안 기능이 애플리케이션에 적용됨
- 강의에서는 `WebSecurityConfigurerAdapter` 클래스를 상속하여 사용했으나, Spring Security 최신 버전에서는 `SecurityFilterChain`을 사용하는 것이 권장된다고 하여 강의와는 다르게 사용했음
> SecurityFilterChain (m)
- `@Bean`
- Spring 컨테이너에 의해 관리되는 빈을 정의함
- `filterChain` 메서드는 `SecurtyFilterChain` 빈을 생성하고 반환함
- `SecurtyFilterChain`
- Spring Security의 필터 체인을 설정하는 인터페이스임
- 보안 관련 설정을 정의하고, HTTP 요청을 처리하는 필터 체인을 구성함
- `HttpSecurity`
- Spring Security의 HTTP 보안 설정을 구성하는 객체
- 인증, 권한 부여, 로그인, 로그아웃, CSRF 보호 등과 같은 설정을 정의할 수 있음
- `authorizeHttpRequests`
- HTTP 요청에 대한 접근 권한을 설정함
- `requestMatchers`: 특정 URL 패턴에 대한 접근 권한을 설정함
- (...) 경로에 대한 요청은 인증이 필요하다고 설정함
- `anyRequest().permitAll()`: 그 외에 나머지 모든 요청은 인증 없이 접근할 수 있도록 허용함
- `requestMatchers`: 특정 URL 패턴에 대한 접근 권한을 설정함
- HTTP 요청에 대한 접근 권한을 설정함
- `formLogin`
- 폼 기반 로그인 설정을 정의함
- `loginPage("/auth/signin")`
- 로그인 페이지의 URL 설정함
- 사용자가 로그인 페이지로 이동할 때 이 URL이 사용됨
- `loginProcessingUrl("/auth/signin")`
- 로그인 폼의 `action` URL을 설정함
- 사용자가 로그인 폼을 제출하면 이 URL로 POST 요청이 전송됨
- Spring Securty는 이 URL을 처리하여 로그인 프로세스를 진행함
- `defaultSuccessUrl("/")
- 로그인 성공 후 이동할 기본 URL을 설정함
- 로그인에 성공하면 사용자가 이 URL로 리다이렉트 됨
- `build`
- `build()`
- 설정을 완료하고 `SecurityFilterChain` 객체를 반환함
- Spring Security가 웹 애플리케이션의 보안을 처리하는 데 사용됨
- `build()`
이지업클래스 [메타코딩] 스프링부트 SNS프로젝트 - 포토그램 만들기 강의 실습
참고
OpenAi. (2024) ChatGPT (version 3.5)[Large Language model]. https://chat.openai.com
300x250
'Framekwork > photogram' 카테고리의 다른 글
[스프링 부트 포토그램] 18강 인증 회원가입 - User 모델 만들기 (0) | 2024.09.02 |
---|---|
[스프링 부트 포토그램] 17강 인증 회원가입 - CSFR 토큰 해제 (0) | 2024.08.26 |
[스프링 부트 포토그램] 11강 ~ 15강 Controller (데이터 전송, 응답, redirection) (0) | 2024.08.21 |
[스프링 부트 포토그램] 8강~ 10강 Controller (동작 방식, http, 쿼리스트링, 주소 변수 매핑) (0) | 2024.08.20 |
[스프링 부트 포토그램] 1강 ~7강 환경설정 완료 (0) | 2024.08.09 |