본문 바로가기
Framekwork/photogram

[스프링 부트 포토그램] 16강 인증 회원가입 - SecurityConfig 생성

by 아이엠제니 2024. 8. 22.

 

IDE: IntetlliJ Ultimate
Spring Boot: 3.3.0
JDK: 17

 


 

 

 

 

 

[스프링 부트 포토그램] 11강 ~ 15강 Controller (데이터 전송, 응답, redirection)

IDE: IntetlliJ UltimateSpring Boot: 3.3.0JDK: 17      [스프링 부트 포토그램] 8강~ 10강 Controller (동작 방식, http, 쿼리스트링, 주소 변수 매핑)IDE: IntetlliJ UltimateSpring Boot: 3.3.0JDK: 17     [스프링 부트 포

devje.tistory.com

 

 

 

 

 

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()`: 그 외에 나머지 모든 요청은 인증 없이 접근할 수 있도록 허용함
  • `formLogin`
    • 폼 기반 로그인 설정을 정의함
    • `loginPage("/auth/signin")`
      • 로그인 페이지의 URL 설정함
      • 사용자가 로그인 페이지로 이동할 때 이 URL이 사용됨
    • `loginProcessingUrl("/auth/signin")`
      • 로그인 폼의 `action` URL을 설정함
      • 사용자가 로그인 폼을 제출하면 이 URL로 POST 요청이 전송됨
      • Spring Securty는 이 URL을 처리하여 로그인 프로세스를 진행함
    • `defaultSuccessUrl("/")
      • 로그인 성공 후 이동할 기본 URL을 설정함
      • 로그인에 성공하면 사용자가 이 URL로 리다이렉트 됨
  • `build`
    • `build()`
      • 설정을 완료하고 `SecurityFilterChain` 객체를 반환함
      • Spring Security가 웹 애플리케이션의 보안을 처리하는 데 사용됨

 

 

 

이지업클래스 [메타코딩] 스프링부트 SNS프로젝트 - 포토그램 만들기 강의 실습

참고
OpenAi. (2024) ChatGPT (version 3.5)[Large Language model]. https://chat.openai.com

 

 

 

 

 

300x250