<aside> 💡
진행 순서
extra. 인메모리 사용법
</aside>
formLogin은 로그인은 기본적으로 UsernameAndPasswordAuthenticationFilter를 사용하였다. 본 게시물에서는 UsernameAndPasswordAuthenticationFilter앞에 커스텀JWT인증필터를 만들어 JWT 인증을 구현해본다.
// Jwt 관련 의존성
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' // for JSON processing
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
private final JwtAuthenticationFilter jwtAuthenticationFilter;
private final AuthenticationProvider authenticationProvider;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable) // JWT를 사용할 경우 CSRF 비활성화
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 세션을 사용하지 않음
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/register").permitAll() // 인증 없이 접근 가능
.anyRequest().authenticated() // 나머지 요청은 인증 필요
)
.authenticationProvider(authenticationProvider)
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); // JWT 필터 적용
return http.build();
}
}
@EnableWebSecurity가 반드시 필요하다.SessionCreationPolicy.STATELESS :
UsernameAndPasswordAuthenticationFilter앞에 커스텀JWT인증필터를 추가한다.