기존에 잘 돌아가던 demo 프로젝트에 Security 의존성을 추가하니 모든 API 호출시 401에러가 떴다. 왜 의존성 추가 하나만으로 잘 돌아가던 서버가 에러를 뱉는걸까?
Security의 기본 보안 정책 자동 활성화
Spring Security는 의존성 추가만으로도 다음 설정을 자동 적용
- 모든 요청은 인증 필요
- 인증되지 않은 요청은 → 401 Unauthorized
- Form 로그인 페이지가 자동 생성됨
- 기본 사용자 계정이 자동 생성됨 (username=user, password=콘솔에 출력)
즉 security가 추가되며 모든 요청을 가로막은 것이다.
Security를 추가한 후의 동작 흐름

왜 401일까?
Spring Security가 요청을 Controller로 보내기 전에 차단하기 때문 , 컨트롤러에 도달하지도 않았다.
해결 방법 - 허용할 요청 명시
@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();
}
- csrf : JWT 기반 인증에서는 필요하지 않으니 CSRF 보호를 비활성화
- httpBasic : HTTP Basic 인증 방식 비활성화
- formLogin : 기본 로그인 폼과 관련된 필터 비활성화
- addFilterBefore : 필터의 순서를 지정해주는 역할
- .addFilterBefore(jwtFilter, SecurityContextHolderAwareRequestFilter.class) = jwtFilter 뒤에 SecurityContextHolderAwareRequestFilter 를 위치 시킬 것
- authorizeHttpRequests : 어디에 어떻게 권한 검사를 할 것인지에 대한 구체적인 내용
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/login").permitAll()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.requestMatchers("/api/user/**").hasRole("USER")'Dev. > Spring' 카테고리의 다른 글
| [Spring] Spring Security + JWT로 로그인 기능 구현 (0) | 2025.12.09 |
|---|---|
| [Spring] Transactional 사용시 자가호출(Self-Invocation)이슈 (0) | 2025.12.08 |
| [Spring] AOP 정리 (0) | 2025.12.03 |
| [Spring] Interceptor 정리 (1) | 2025.12.02 |
| [Spring] interface의 default 메서드를 언제 써야 할까 (0) | 2025.11.29 |