스프링애플리케이션에서 스프링 시큐리티를 사용할 때
“The type WebSecurityConfigurerAdapter is deprecated”
경고를 제거하는 방법✍🏻
많은 사람들은 아래 방법과 같은 WebSecurityConfigurerAdapter 추상 클래스를 확장하는 Spring 구성 클래스를 사용하는 데 익숙할 것입니다 .
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// configure HTTP security...
}
@Override
public void configure(WebSecurity web) throws Exception {
// configure Web security...
}
}
해당 방법은
' Spring Security 버전 5.6.5' 또는 이전 버전'
' Spring Boot 버전 2.6.8 또는 이전 버전'
에서는 문제가 없습니다 .
그러나 프로젝트에서 Spring Security 5.7.1 이상 또는 Spring Boot 2.7.0 이상을 사용하는 경우 IDE 에
“The type WebSecurityConfigurerAdapter is deprecated” 경고가 표시됩니다.
그렇다면 Spring Security 가 WebSecurityConfigurerAdapter 의 사용을 더 이상 사용하지 않는 이유 와 대안 에 대해서 알아보겠습니다.
-이유🤷🏻♀️
스프링 프레임워크 개발자들은 사용자가 컴포넌트 기반 보안 구성으로 이동하기를 권하기 때문입니니다 .
-대안🙆🏻♂️
WebSecurityConfigurerAdapter 를 extends 하고 HttpSecurity 및 WebSecurity 오버라이딩 하는 대신
아래 방법과 같이 SecurityFilterChain 및 WebSecurityCustomizer 유형의 두 빈을 선언 합니다 .
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
}
}
-예시💻
security configuration 의 컴포넌트 기반 접근방식으로 바꾸는 코드 예제입니다 .
먼저 아래와 같이 WebSecurityConfigurerAdapter 를 사용하는 일반적인 security configuration class 를 살펴보겠습니다 .
기존)
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public UserDetailsService userDetailsService() {
return new ShopmeUserDetailsService();
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/login").permitAll()
.antMatchers("/users/**", "/settings/**").hasAuthority("Admin")
.hasAnyAuthority("Admin", "Editor", "Salesperson")
.hasAnyAuthority("Admin", "Editor", "Salesperson", "Shipper")
.anyRequest().authenticated()
.and().formLogin()
.loginPage("/login")
.usernameParameter("email")
.permitAll()
.and()
.rememberMe().key("AbcdEfghIjklmNopQrsTuvXyz_0123456789")
.and()
.logout().permitAll();
http.headers().frameOptions().sameOrigin();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/images/**", "/js/**", "/webjars/**");
}
}
그리고 아래 대안법은 WebSecurityConfigurerAdapter 를 사용하지 않은 예시입니다 .
대안법)
package net.codejava;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public UserDetailsService userDetailsService() {
return new ShopmeUserDetailsService();
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/login").permitAll()
.antMatchers("/users/**", "/settings/**").hasAuthority("Admin")
.hasAnyAuthority("Admin", "Editor", "Salesperson")
.hasAnyAuthority("Admin", "Editor", "Salesperson", "Shipper")
.anyRequest().authenticated()
.and().formLogin()
.loginPage("/login")
.usernameParameter("email")
.permitAll()
.and()
.rememberMe().key("AbcdEfghIjklmNopQrsTuvXyz_0123456789")
.and()
.logout().permitAll();
http.headers().frameOptions().sameOrigin();
return http.build();
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/images/**", "/js/**", "/webjars/**");
}
}
해당 방법은 스프링 기반 애플리케이션의 스프링 시큐리티 사용에 있어서
“The type WebSecurityConfigurerAdapter is deprecated” 경고를 지우는 방법입니다 .
즉 , WebSecurityConfigurerAdapter 의 메스드 오버라이딩 정의 방법 대신 SecurityFilterChain 과 WebSecurityCustomizer 빈들을 선언해야 합니다 .
만약 코드를 변경하지 않고 유지 보수하기 위해서는 Spring Boot 버전을 2.7.0 미만으로 유지하거나 Spring Security 버전을 5.7.1 이전으로 유지해야 합니다 .
참고 https://www.codejava.net/frameworks/spring-boot/fix-websecurityconfigureradapter-deprecated
Spring Security - How to Fix WebSecurityConfigurerAdapter Deprecated
Written by Nam Ha Minh
Spring Security - How to Fix WebSecurityConfigurerAdapter Deprecated
DetailsWritten by Nam Ha Minh Last Updated on 01 June 2022 | Print Email In this short article, I’d like to share how to get rid of the warning saying that “The type WebSecurityConfigurerAdapter is deprecated” in Spring-based application w
www.codejava.net