spring security 에서 form말고 json body를 받는 REST API login 구현하기 (2) - SecurityConfig
spring security 에서 form말고 json body를 받는 REST API login 구현하기 (1) - Filter (opens in a new tab) 에서는
Filter 생성에 대해서 알아보았고 이어서 SecurityConfig 셋팅에 대해서 알아보겠다
SecurityConfig 셋팅
자 이제 Filter 생성이 끝났으니 Config 셋팅이 필요하다
WebSecurityConfigurerAdapter 를 상속받은 Config 클래스가 하나 필요하다
이름은 WebSecurityConfig 라고 하겠다
SecurityConfig.java
@RequiredArgsConstructor
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final JwtTokenProvider jwtTokenProvider;
@Override
protected void configure(HttpSecurity http) throws Exception {
// 1
JsonUsernamePasswordAuthenticationFilter jsonUsernamePasswordAuthenticationFilter = new JsonUsernamePasswordAuthenticationFilter(
jwtTokenProvider);
jsonUsernamePasswordAuthenticationFilter.setAuthenticationManager(authenticationManagerBean());
// 2
http.httpBasic().disable()
.authorizeRequests()
.addFilterBefore(jsonUsernamePasswordAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
// 3
.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), JsonUsernamePasswordAuthenticationFilter.class);
}
}설명할 부분을 남기고 최대한 생략하였다
함수 단위로 알아보자
configure()
configure() 함수는 인자로 받은 HttpSecurity 의 configs 에 구성들을 추가하는 용도이다
JsonUsernamePasswordAuthenticationFilter객체를 생성하면서jwtTokenProvider와AuthenticationManager를 주입합니다.- 생성된
jsonUsernamePasswordAuthenticationFilter객체를addFilterBefore()함수를 통하여UsernamePasswordAuthenticationFilter.class필터보다 먼저 동작하도록 등록합니다. JwtAuthenticationFilter를 생성하면서jwtTokenProvider를 주입하고 먼저 등록된JsonUsernamePasswordAuthenticationFilter필터보다 먼저 동작하도록 등록합니다.
- jsonUsernamePasswordAuthenticationFilter : login 요청에 대한 인증 및 JWT 발급 Filter
- JwtAuthenticationFilter : 요청에 포함된 JWT 를 검증하는 Filter