SpringSecurity에서 deprecated된 코드 수정!!

solhe·2023년 11월 20일

스프링 부트와 AWS로 혼자 구현하는 웹서비스

위의 책에서 소셜 로그인 부분을 실습 중이었는데,
코드에 deprecated 된 부분이 많아서 혼란스러웠다.
과도한 메쏘드 체이닝을 지양하고 람다식을 사용하라는 것이었다.
내 나름대로 코드를 수정해보았고, 같은 책으로 실습 중인 다른 분들께 혹시 도움이 될까 싶어 글을 올린다.

먼저, 책에 나와 있던 기존 코드는 다음과 같았다.

import com.book.aws.domain.user.Role;
import lombok.RequiredArgsConstructor;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

@RequiredArgsConstructor
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private final CustomOAuth2UserService customOAuth2UserService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .headers().frameOptions().disable()
                .and()
                .authorizeRequests()
                .antMatchers("/", "/css/**", "images/**", "/js/**", "/h2-console/**").permitAll()
                .antMatchers("/api/v1/**").hasRole(Role.USER.name()).anyRequest().authenticated()
                .and()
                .logout().logoutSuccessUrl("/")
                .and()
                .oauth2Login().userInfoEndpoint().userService(customOAuth2UserService);
    }

}

캡쳐해서 보면, 이러케 신호등마냥 빨강 노랑 난리가 나있었다.

수정된 코드는 다음과 같다.

import com.book.aws.domain.user.Role;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
import org.springframework.security.web.SecurityFilterChain;

@RequiredArgsConstructor
@EnableWebSecurity
public class SecurityConfig2 {
    private final CustomOAuth2UserService customOAuth2UserService;
    
    @Bean
    protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf(AbstractHttpConfigurer::disable)
                .headers(header -> header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
                .authorizeHttpRequests(registry -> registry.requestMatchers("/", "/css/**", "images/**", "/js/**", "/h2-console/**")
                        .permitAll()
                )
                .authorizeHttpRequests(registry -> registry.requestMatchers("/api/v1/**")
                        .hasRole(Role.USER.name())
                        .anyRequest()
                        .authenticated()
                )
                .logout((logout) -> logout.logoutSuccessUrl("/")/*.invalidateHttpSession(true)*/)
                .oauth2Login(oauth2 -> oauth2.userInfoEndpoint(userInfo -> userInfo
                        .userService(customOAuth2UserService)));
        return http.build();
    }

}

캡쳐해서 봐도 깔끔하다 히히

profile
안녕하세여

0개의 댓글