문제
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
// token을 사용하는 방식이기 때문에 csrf를 disable합니다.
//corsfilter
.csrf(AbstractHttpConfigurer::disable)
.exceptionHandling(exceptionHandling->exceptionHandling
.accessDeniedHandler(jwtAccessDeniedHandler)
.authenticationEntryPoint(jwtAuthenticationEntryPoint)
)
//api 허가
.authorizeHttpRequests(authz -> authz
.requestMatchers("/api/hello","/api/authenticate","/api/signup").permitAll()
.requestMatchers(PathRequest.toH2Console()).permitAll() //h2 콘솔 허가
.anyRequest().authenticated()
)
// 세션을 사용하지 않기 때문에 STATELESS로 설정
.sessionManagement(sessionManagement ->
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)
// enable h2-console
.headers(headers ->
headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)
)
.with(new JwtSecurityConfig(tokenProvider),customizer -> {});
return http.build();
}
JWT를 적용하기 위해 SecurityConfig를 작성 중 http.with가 동작하지 않았다.
해결
메소드는 3.2.x 이상부터 사용할 수 있어서 기존의 프로젝트 3.1.7버전에서 3.2.1로 버전업해주어 해결하였다.
이하 버전은 http.apply() 메소드를 사용하여 진행할수 있겠다.
참고