[Spring Security] WebSecurityConfigurerAdapter Deprecated 리팩토링

John·2023년 6월 16일
3

개발 메모🌷

목록 보기
11/13
post-thumbnail

온라인 강의를 들으면서 실습을 진행하던 중, 강의에 사용되었던 WebSecurityConfigurerAdapter가 Deprecated 된 것을 확인했습니다.

Spring 공식 문서를 참조하여 해당 코드를 리팩토링 후 수정했던 코드들을 기록합니다.

스프링 공식문서 Spring Security


Stop Using WebSecurityConfigurerAdapter

Stop Using WebSecurityConfigurerAdapter
Spring Security 5.4는 WebSecurityConfigurerAdapter를 확장하는 대신 SecurityFilterChain 빈을 게시하는 기능을 도입했습니다. 6.0에서는 WebSecurityConfigurerAdapter가 제거되었습니다.


configure 설정(SecurityFilterChain)

변경 전

@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) 메소드로 수정했습니다.


ignore 설정(WebSecurityCustomizer)

변경 전

@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 설정을 추가했습니다.


AuthenticationManager 설정

변경 전

@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가 어떻게 작동되는지 더 자세히 공부하고 글을 작성해보도록 하겠습니다.)

profile
기록을 습관으로

0개의 댓글