온라인 강의를 들으면서 실습을 진행하던 중, 강의에 사용되었던 WebSecurityConfigurerAdapter
가 Deprecated 된 것을 확인했습니다.
Spring 공식 문서를 참조하여 해당 코드를 리팩토링 후 수정했던 코드들을 기록합니다.
Stop Using WebSecurityConfigurerAdapter
Spring Security 5.4는 WebSecurityConfigurerAdapter를 확장하는 대신 SecurityFilterChain 빈을 게시하는 기능을 도입했습니다. 6.0에서는 WebSecurityConfigurerAdapter가 제거되었습니다.
변경 전
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.headers().frameOptions().sameOrigin();
http.authorizeRequests()
.antMatchers(
"/"
, "/member/register"
, "/member/find-password"
)
.permitAll();
...
super.configure(http);
}
변경 후
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.headers().frameOptions().sameOrigin();
http.authorizeRequests()
.antMatchers(
"/"
, "/member/register"
, "/member/find-password"
)
.permitAll();
...
return http.build();
}
configure(HttpSecurity http) 메소드를 filterChain(HttpSecurity http) 메소드로 수정했습니다.
변경 전
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/favicon.ico", "/files/**");
super.configure(web);
}
변경 후
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/favicon.ico", "/files/**");
}
WebSecurityConfigurerAdapter
를 상속받을 경우, configure(WebSecurity web)
메소드를 오버라이딩 해서 WebSecurity ignore 설정을 추가했습니다.
WebSecurityCustomizer
인터페이스를 확인하면 WebSecurity
를 받는 customize(WebSecurity web)
메소드를 확인할 수 있는데, 여기서 WebSecurity ignore 설정을 추가했습니다.
변경 전
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(memberService)
.passwordEncoder(getPasswordEncoder());
super.configure(auth);
}
변경 후
@Bean
public AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(this.memberService);
provider.setPasswordEncoder(this.getPasswordEncoder());
return provider;
}
AuthenticationManagerBuilder
AuthenticationProvider
AuthenticationManagerBuilder
를 통해 userDatailService 및 passwordEncoder 설정을 DaoAuthenticationProvider
를 통해 작업했습니다.
리팩토링 후 정상적으로 작동됨을 확인했습니다.💯
(이후에 Spring Security가 어떻게 작동되는지 더 자세히 공부하고 글을 작성해보도록 하겠습니다.)