Spring Security 6 이해하기: 동작 원리와 보안 기능 탐구

2023. 9. 4. 19:09·Spring/Spring Security
목차
  1. 스프링 시큐리티가 어떻게 동작하는지 궁금해서 알아봤다.
  2. 1. 최상위 필터 인터페이스인 SecurityFilterChain 확인
  3. 2. 각 필터별 확인
반응형

스프링 시큐리티가 어떻게 동작하는지 궁금해서 알아봤다.

 

1. 최상위 필터 인터페이스인 SecurityFilterChain 확인


package org.springframework.security.web;
import java.util.List;
import jakarta.servlet.Filter;
import jakarta.servlet.http.HttpServletRequest;
/**
* Defines a filter chain which is capable of being matched against an
* {@code HttpServletRequest}. in order to decide whether it applies to that request.
* <p>
* Used to configure a {@code FilterChainProxy}.
*
* @author Luke Taylor
* @since 3.1
*/
public interface SecurityFilterChain {
boolean matches(HttpServletRequest request);
List<Filter> getFilters();
}

 

  • getFilters() 메소드에 디버그를 찍고 프로젝트를 실행시켰다. 그랬더니 아래의 DefaultSecurityFilterChain 코드로 이동했다.
public final class DefaultSecurityFilterChain implements SecurityFilterChain {
private static final Log logger = LogFactory.getLog(DefaultSecurityFilterChain.class);
private final RequestMatcher requestMatcher;
private final List<Filter> filters;
public DefaultSecurityFilterChain(RequestMatcher requestMatcher, Filter... filters) {
this(requestMatcher, Arrays.asList(filters));
}
public DefaultSecurityFilterChain(RequestMatcher requestMatcher, List<Filter> filters) {
if (filters.isEmpty()) {
logger.info(LogMessage.format("Will not secure %s", requestMatcher));
}
else {
logger.info(LogMessage.format("Will secure %s with %s", requestMatcher, filters));
}
this.requestMatcher = requestMatcher;
this.filters = new ArrayList<>(filters);
}
public RequestMatcher getRequestMatcher() {
return this.requestMatcher;
}
@Override
public List<Filter> getFilters() {
return this.filters;
}
@Override
public boolean matches(HttpServletRequest request) {
return this.requestMatcher.matches(request);
}
@Override
public String toString() {
return this.getClass().getSimpleName() + " [RequestMatcher=" + this.requestMatcher + ", Filters=" + this.filters
+ "]";
}
}
  • 여기서 getFilters()가 동작했다. → 인터페이스의 구현체로 여기가 선택되었다.
@Override
public List<Filter> getFilters() {
return this.filters;
}
  • 이제 디버깅을 확인했더니 아래 사진과 같이 필터가 15개 연결되어있는것을 확인했다.

필터체인

 


 

2. 각 필터별 확인


  1. DisableEncodeUrlFilter :
    • 이 필터는 URL 인코딩을 비활성화한다.
    • URL 인코딩은 일반적으로 보안을 강화하기 위해 사용되지만, 특정 상황에서는 불필요할 수 있다.
  2. WebAsyncManagerIntegrationFilter:
    • 이 필터는 비동기 요청과 SecurityContext를 통합한다.
    • 비동기 작업에서도 보안 컨텍스트가 유지되도록 도와준다.
  3. SecurityContextHolderFilter:
    • SecurityContext의 초기화 및 정리를 수행한다.
    • 이 필터가 없으면 보안 컨텍스트는 초기화되지 않을 수 있다.
  4. CorsFilter:
    • 이 필터는 CORS 설정을 처리한다.
    • 이는 다른 도메인에서 리소스를 안전하게 요청할 수 있도록 해준다.
  5. LogoutFilter:
    • 로그아웃 요청을 처리하고, 성공한 후의 작업(세션 무효화, 쿠키 삭제 등)을 수행한다.
  6. CustomAuthenticationFilter:
    • 사용자 지정 인증 필터로, 사용자 인증 작업을 담당한다.(직접 커스텀)
  7. JwtAuthorizationFilter:
    • JWT 인증을 처리하는 필터이다.(직접 만든것)
  8. UsernamePasswordAuthenticationFilter:
    • 기본적으로 사용자 이름과 비밀번호를 통한 인증 요청을 처리한다.
  9. RequestCacheAwareFilter:
    • 인증 전 요청을 캐시하여 인증 후 원래의 요청으로 리다이렉트할 수 있게 한다.
  10. SecurityContextHolderAwareRequestFilter:
    • 현재 요청과 SecurityContext를 통합한다. 이를 통해 권한이나 인증 정보에 쉽게 접근할 수 있다.
  11. AnnonymousAuthenticationFilter:
    • 인증되지 않은 사용자에 대해 익명 인증을 제공한다. 이로써 모든 요청에 인증 객체가 있게 된다.
  12. SessionManagementFilter:
    • 세션 고정 보호, 세션 타임아웃, 동시 세션 제어 등 세션 관련 보안 기능을 제공한다.
  13. ExceptionTranslationFilter:
    • 보안 예외가 발생하면 적절한 처리(예: 리다이렉트, 에러 메시지 등)를 수행한다.
  14. AuthorizationFilter:
    • 사용자의 권한을 확인하여 특정 리소스에 대한 접근을 허용하거나 거부한다.

 


 

2023.10.21 - [SpringBoot 개발/Spring Security] - Spring Security6 - Authentication(인증)

 

Spring Security6 - Authentication(인증)

1. 인증 관련 주요 클래스와 인터페이스 및 동작원리 Authentication: 인증 요청과 인증된 주체를 나타내는 인터페이스이다. AuthenticationManager: 실제로 인증을 처리하는 인터페이스이다. UserDetailsService

curiousjinan.tistory.com

 

 

2023.08.07 - [SpringBoot 개발/Spring Security] - Spring Boot 3.1과 Spring Security 6 시작하기: JWT 로그인 폼 구현 (1편)

 

Spring Boot 3.1과 Spring Security 6 시작하기: JWT 로그인 폼 구현 (1편)

시큐리티를 구현하기 전에 JWT 토큰이 뭔지에 대해 먼저 알고 넘어가자 1. JWT란 JWT (JSON Web Token)는 웹에서 정보를 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 제공하는 토큰이다. JWT는

curiousjinan.tistory.com

 

반응형

'Spring > Spring Security' 카테고리의 다른 글

Spring Boot 3.1 & Spring Security 6: Security Config 최적화 리팩토링 (12편)  (0) 2023.09.04
Spring Boot 3.1 & Spring Security 6: JWT 검증 리팩토링 (11편)  (2) 2023.09.04
Spring Boot 3.1 & Spring Security 6: 로그인 프로세스 및 JWT 토큰 동작 설명 (10편)  (0) 2023.08.08
Spring Boot 3.1 & Spring Security 6: 로그인 & 메인 페이지 컨트롤러 (9편)  (0) 2023.08.08
Spring Boot 3 & Security 6 시리즈: UserDetailsService, DTO 작성하기 (8편)  (0) 2023.08.07
  1. 스프링 시큐리티가 어떻게 동작하는지 궁금해서 알아봤다.
  2. 1. 최상위 필터 인터페이스인 SecurityFilterChain 확인
  3. 2. 각 필터별 확인
'Spring/Spring Security' 카테고리의 다른 글
  • Spring Boot 3.1 & Spring Security 6: Security Config 최적화 리팩토링 (12편)
  • Spring Boot 3.1 & Spring Security 6: JWT 검증 리팩토링 (11편)
  • Spring Boot 3.1 & Spring Security 6: 로그인 프로세스 및 JWT 토큰 동작 설명 (10편)
  • Spring Boot 3.1 & Spring Security 6: 로그인 & 메인 페이지 컨트롤러 (9편)
Stark97
Stark97
문의사항 또는 커피챗 요청은 링크드인 메신저를 보내주세요! : https://www.linkedin.com/in/writedev/
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (240)
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (5)
      • MSA (14)
      • DDD (7)
      • gRPC (9)
      • Apache Kafka (18)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
Spring Security 6 이해하기: 동작 원리와 보안 기능 탐구

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.