전에 spring-security 란 무엇인가 또 로그인 아키텍처 순서에 대해 알아보았다. 이번엔 코드를 작성하여 구현해 보도록 하자. 전에 만들어 놓았던 JWT 생성 코드또한 같이 사용할 예정이다.
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-security'
...
}
@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
//TODO 로직구현 필요
chain.doFilter(request, response);
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, JwtAuthenticationFilter jwtAuthenticationFilter) throws Exception {
http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(authz -> authz
.requestMatchers("/login").permitAll()
.anyRequest().authenticated()
)
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
);
// JWT 필터 등록
http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
return http.build();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
이와 같이 JWT 인증 및 spring-security 설정을 해보았다. 이후엔 이를 활용하여 직접적인 로그인기능을 구현해 보도록 하자.