스프링 부트와 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();
}
}
캡쳐해서 봐도 깔끔하다 히히
