-
[Spring] Security WebSecurityConfigurerAdapter Deprecated 해결하기Server/Spring 2022. 6. 29. 00:06728x90반응형
WebSecurityConfigurerAdapter Deprecated 해결하기
최근에
Spring Security
를 설정해보려고WebSecurityConfigurerAdapter
를 사용하려 보니Deprecated
가 되어 있었는데요.@RequiredArgsConstructor @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { private final ObjectMapper objectMapper; private final JwtAuthenticationFilter jwtAuthenticationFilter; @Override public void configure(WebSecurity web) { web.ignoring().mvcMatchers( "/error", "/favicon.ico", "/swagger-ui.html", "/swagger/**", "/swagger-resources/**", "/webjars/**", "/v2/api-docs" ); web.ignoring().antMatchers( "/api/v2//login/**" ); } @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/**") .authorizeRequests() .antMatchers("/api/v2/**").hasAuthority(USER.name()); http.httpBasic().disable() .formLogin().disable() .cors().disable() .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .anyRequest().permitAll() .and() .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); http.exceptionHandling() .authenticationEntryPoint(((request, response, authException) -> { response.setStatus(HttpStatus.UNAUTHORIZED.value()); response.setContentType(MediaType.APPLICATION_JSON_VALUE); objectMapper.writeValue( response.getOutputStream(), ExceptionResponse.of(ExceptionCode.FAIL_AUTHENTICATION) ); })) .accessDeniedHandler(((request, response, accessDeniedException) -> { response.setStatus(HttpStatus.FORBIDDEN.value()); response.setContentType(MediaType.APPLICATION_JSON_VALUE); objectMapper.writeValue( response.getOutputStream(), ExceptionResponse.of(ExceptionCode.FAIL_AUTHORIZATION) ); })); } }
위와 같은 많은 설정들을
WebSecurityConfigurerAdapter
를extends
해서configure
메소드를 오버라이딩 해서 구현했었습니다.하지만 이제
WebSecurityConfigurerAdapter
가Deprecated
가 되어서 사용할 수 없다보니 다른 것을 사용해서 구현해야 합니다.WebSecurityConfigurerAdapter
공식문서를 보면 위와 같이 나와 있습니다.Deprecated. Use a SecurityFilterChain Bean to configure HttpSecurity or a WebSecurityCustomizer Bean to configure WebSecurity
요약하면
WebSecurityConfigurerAdapter
가Deprecated
되었으니SecurityFilterChain
를Bean
으로 등록해서 사용해라 입니다.위의 내용만 보면 감이 잘 오지 않아서 Spring Security 공식문서를 보면 어떻게 설정해야 하는지 나와있습니다.
기존 코드의 설정을 바꿔보면?
@RequiredArgsConstructor @EnableWebSecurity public class SecurityConfig { private final ObjectMapper objectMapper; private final JwtAuthenticationFilter jwtAuthenticationFilter; @Bean public WebSecurityCustomizer configure() { return (web) -> web.ignoring().mvcMatchers( "/v3/api-docs/**", "/swagger-ui/**", "/api/v1/login" // 임시 ); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http.antMatcher("/**") .authorizeRequests() .antMatchers("/api/v1/**").hasAuthority(USER.name()) .and() .httpBasic().disable() .formLogin().disable() .cors().disable() .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .anyRequest().permitAll() .and() .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class) .exceptionHandling() .authenticationEntryPoint(((request, response, authException) -> { response.setStatus(HttpStatus.UNAUTHORIZED.value()); response.setContentType(MediaType.APPLICATION_JSON_VALUE); objectMapper.writeValue( response.getOutputStream(), ExceptionResponse.of(ExceptionCode.FAIL_AUTHENTICATION) ); })) .accessDeniedHandler(((request, response, accessDeniedException) -> { response.setStatus(HttpStatus.FORBIDDEN.value()); response.setContentType(MediaType.APPLICATION_JSON_VALUE); objectMapper.writeValue( response.getOutputStream(), ExceptionResponse.of(ExceptionCode.FAIL_AUTHORIZATION) ); })).and().build(); } }
기존에 위에 있던 설정들을 최신 Security에 맞게 바꿔보면 위와 같이 바꿀 수 있습니다.
Reference
- https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.html
- https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
반응형'Server > Spring' 카테고리의 다른 글
[Spring] Multi Module에서 implementation으로 참조 못하는 에러 해결하기 (0) 2022.11.27 [Spring] 멀티 모듈에서 모듈별 yml 파일 관리하는 법 (1) 2022.10.04 [Spring] Multi-Module에서 Domain 모듈 테스트 실행하는 법 (1) 2022.06.23 [JPA] @OneToOne 관계에서 N + 1 발생하는 이유가 무엇일까? (4) 2022.06.04 [Spring] Spring Security, React를 사용하면서 CORS 허용하는 방법 (0) 2021.12.23