Notice
Recent Posts
Recent Comments
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Spring & Java

Spring Security 개념 및 구조 본문

심화 Spring/Spring Security

Spring Security 개념 및 구조

dev.hyuck 2026. 1. 22. 16:02

 

이번에는 Spring Security의 개념과 구조를 이해하고 인증/인가를 Spring Security가 어떻게 처리되는지 학습 하는게 목표 입니다.

인증 방식 ( Session, Token, OAuth2) 의 차이를 개념적으로 정리해보겠습니다.

 

Spring Security 개념 및 구조 

스프링 기반 애플리케이션의 인증(Authentication) 과 인증 (Authorization) 를 담당하는 보안 프레임워크입니다.

 

요즘 가장 많이 쓰는 3개의 인정/인가 방식 알아만 보자!

 

Filter 기반 보안 처리

Spring Security 적용을 위한 작업

implementation 'org.springframework.boot:spring-boot-starter-security'

이거 한줄

여기에 추가 해보기!

에러가 난다는데 난 필터가 있어서 그런가 .. 에러가 발생하지 않았다. 아! 설마 설마해서 OncePerRequestFilter 관련이 있는지 찾아 봤는데 역시나 OncePerRequestFilter 와 관련이 있었기 때문이다. 

이제부터 이론을 좀 더 파면서 학습할 필요가 있지만 아직 무슨 말인지 새로운 애가 나타나서 혼란스럽기는 마찬가지다.

 

 

Spring Security의 기본 흐름

[사용자 요청] id/password 입력
    ↓
[Security Filter Chain] 인증/인가 검사
    ↓ 
[AuthenticationManager] 인증을 하고 위임을 하고.. 뭔가 하는 놈
    ↓ 
[AuthenticationProvider] 또 뭘 지지고 복고 한데..
    ↓ 
[UserDetailsService] 또 지지고 복고 뭐 한데 .. 
    ↓ 
[User 저장 및 인증 처리]

아 .. 어렵다 이거 ... 

위에는 " Session " 방식이라는 함정!

자 jwt 인증 방식 도입으로 변경 하면 어떻게 되냐 !

[사용자 요청] id/password 입력
    ↓
[JwtFilter (커스텀 필터)] 토큰 검사/ 유효한가 유효하지 않은가!
    ↓ 
[Security Filter Chain] 인증 인가 처리 하고 보내준다. 
    ↓ 
[User 저장 및 인증 처리]

 

자 근데 .. Spring Security 커스텀이 있는것도 알겠는데 저걸 어떻게 사용하는지가 중요해지는 시점인데 ..

어떻게 사용하면 좋을까 ??

 

사용 예시 

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
            .csrf(AbstractHttpConfigurer::disable)  // .csrf().disable() 방식은 더 이상 사용 안함.
            .httpBasic(AbstractHttpConfigurer::disable) // BasicAuthenticationFilter 비활성화
            .formLogin(AbstractHttpConfigurer::disable) // UsernamePasswordAuthenticationFilter, DefaultLoginPageGeneratingFilter 비활성화
            .addFilterBefore(jwtFilter, SecurityContextHolderAwareRequestFilter.class)
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/login").permitAll()
                .anyRequest().authenticated()
            )
            .build();
    }
    
    crsf : CSRF(Cross-Site Request Forgery) 보호를 비활성화합니다.
    httpBasic :  HTTP Basic 인증 방식을 비활성화합니다.
    formLogin :  기본 로그인 폼과 관련된 필터를 비활성화합니다.
    
addFilterBefore : 필터의 순서를 지정해주는 역할 
	○ .addFilterBefore(jwtFilter, SecurityContextHolderAwareRequestFilter.class)
	○ jwtFilter 뒤에 SecurityContextHolderAwareRequestFilter 를 위치 시킬 것 이다.
    -> 굳이 알필요는 없지만 어떤식으로 쓰는지 체크만!
    
    
    authorizeHttpRequests : 어디에 어떻게 권한 검사할 것인가?
    url별로 권한/검사를 시켜주는 공간으로 이해하면 됩니다.
    .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/login").permitAll()
                .requestMatchers("/api/admin/**").hasRole("ADMIN")
                .requestMatchers("/api/user/**").hasRole("USER")
                
                ("/api/user/**") 여기서 **는 뭘까? 
                = 와일드카드 같은건데 지금 위 url으로 시작하는 모든 곳을 지칭한다고 보면 됩니다.

 

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

Spring Security Context와 인증구조 및 실습  (0) 2026.01.22
인증 & 인가 개념 정리  (0) 2026.01.22