Spring & Java
Spring Security 개념 및 구조 본문

이번에는 Spring Security의 개념과 구조를 이해하고 인증/인가를 Spring Security가 어떻게 처리되는지 학습 하는게 목표 입니다.
인증 방식 ( Session, Token, OAuth2) 의 차이를 개념적으로 정리해보겠습니다.
Spring Security 개념 및 구조
스프링 기반 애플리케이션의 인증(Authentication) 과 인증 (Authorization) 를 담당하는 보안 프레임워크입니다.

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 |