Spring 24

[Spring Security] 요청 캐시 흐름 정리

해당 동작을 하는 모든 필터들은 FilterChainProxy에 있는 필터들에서 동작 1. 인증되지 않은 사용자가 리소스 요청사용자가 인증이 필요한 리소스에 접근하려 하면, Spring Security는 이 요청을 가로채 인증 여부를 확인2. 인증되지 않은 경우, 예외 처리인증되지 않은 경우, ExceptionTranslationFilter에서 예외를 처리이때 AccessDeniedException이나 AuthenticationException을 던지게된다.AccessDeniedException은 인증은 했지만 권한이 부족한 경우AuthenticationException은 인증이 필요한 경우 RequestCache 인터페이스의 구현체(HttpSessionRequestCache가 일반적)에서 요청 정보를 ..

[Spring Boot] 자동 구성 동작

엔트리 포인트 main()@SpringBootApplicationpublic class SecurityApplication { public static void main(String[] args) { SpringApplication.run(SecurityApplication.class, args); }} 스프링 부트 애플리케이션의 엔트리 포인트이다. 스프링 부트가 실행이 되면 main 메서드가 실행이 되면서 SpringApplication.run(SecurityApplication.class, args); 메서드가 실행이 된다.  @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inh..

Spring/Spring Boot 2024.09.03

[Spring Security] 로그인 사용자 정보 가져오기

@AuthenticationPrincipalSpring Security에서 사용되는 어노테이션이 어노테이션은 주로 컨트롤러 메서드의 인자로 사용현재 로그인한 사용자의 정보를 쉽게 접근할 수 있도록 해준다.  @AuthenticationPrincipal을 사용하면 Spring Security는 자동으로 인증된 사용자의 Principal 객체를 메서드 파라미터에 주입이 Principal 객체는 일반적으로 사용자명이나 사용자 ID와 같은 정보가 포함된 UserDetails 객체 사용 방법 UserPrincipal(UserDetails(인터페이스) - 구현체(User) - 상속(UserPrincipal) 커스텀 클래스 public class UserPrincipal extends User { private..

[Spring Security] ROLE VS AUTHORITY

스프링 시큐리티에서 역할과 권한 두 개념은 유사하지만 서로 다른 목적과 용도로 사용된다.   역할 (Role)역할은 사용자가 수행할 수 있는 기능이나 책임을 그룹화하는 상위 개념 보통 여러 권한을 포함하는 큰 단위예) "ADMIN", "USER", "MANAGER" 권한 (Authority)특정 작업이나 자원에 대한 접근 권한을 정의하는 더 세분화된 개념, 권한은 구체적이며, 특정 작업이나 리소스에 대한 허가를 나타낸다. 예) "READ_PRIVILEGE", "WRITE_PRIVILEGE", "DELETE_PRIVILEGE" / 데이터 읽기 권한  스프링 시큐리티에서 역할과 권한 설정하기 UserPrincipal: UserDetailsService 반환 객체 (UserDetails 구현체) https:/..

[Spring Security] UserDetailsService

로그인 ~ 세션 생성 회원가입을 하고 유저의 정보를 DB에 저장하고 스프링 시큐리티를 통해 로그인을 했을 때어떤 방식으로 DB에서 유저 정보를 조회하고 활용할까?  1. 로그인 요청사용자가 로그인 폼에 사용자 이름과 암호를 입력하고 제출 2. UserDetailsService 호출SpringSecurity는 UserDetailsService의 loadUserByUsername 메서드를 호출하여 사용자 이름을 기반으로 사용자의 UserDetails 객체를 조회한다. public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;}@Beanpublic User..

[Spring Security] Spring Session JDBC

Spring Session JDBC란?Spring Session JDBC는 Spring 애플리케이션에서 세션 관리를 데이터베이스를 이용해 수행할 수 있도록 지원하는 라이브러리이다. 기본적으로 HTTP 세션은 서버의 메모리에 저장되지만, Spring Session JDBC를 사용하면 세션을 데이터베이스에 저장하여 여러 가지 이점을 얻을 수 있다.  Spring Session JDBC 의존성 추가 // 스프링 Session JDBCimplementation 'org.springframework.session:spring-session-jdbc' Spring Session 동작 확인 현재 나는 application.yaml 설정 파일에 h2 데이터베이스 관련 설정을 해두었다.  이렇게 세션 관련 테이블이 자동..

[Spring Security] 시큐리티 폼 로그인 커스텀 설정

PasswordEncorder@Beanpublic PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder();} 비밀번호 암호화에 사용할 PasswordEncorder 빈 정의 PasswordEncorder 인터페이스는 14개의 구현체를 제공한다. BCryptPasswordEncorder는 BCrypt 알고리즘을 사용한다. 예전에 스프링 시큐리티 비밀번호 암호화 모듈인 Crypto와 그중에서 ScyptEncorder를 정리했는데 참고하면 좋다. https://20240228.tistory.com/160 비밀번호 암호화 적용하기(Spring Security Crypto)https://20240228.tistory.com/153 비밀번호..

CSRF? + Spring Security 기본 설정

CSRF란 무엇인가? CSRF(Cross-Site Request Forgery, 크로스 사이트 요청 위조)웹 애플리케이션의 보안 취약점을 악용하여, 사용자가 원하지 않는 동작을 수행하게 만드는 공격 기법 중 하나이다.사용자가 웹사이트에 로그인한 상태에서 사용자의 권한을 악용해 공격자가 의도한 요청을 실행하도록 유도한다.  ex)특정 페이지에 방문할 때 저절로 로그아웃 or 게시글이 써지는 현상은행과 같은 사이트에서 다른 사람에게 송금하는 행동을 넣는 등 상황에 따라 크게 악용될 수 있는 심각한 공격이다. CSRF 공격의 작동 원리 1. 인증된 세션 사용자가 웹 애플리케이션에 로그인하면, 서버는 사용자에게 세션을 유지하기 위한 쿠키를 발급한다. 해당 쿠키는 사용자의 브라우저에 저장, 사용자가 해당 애플리케..