springboot 3.1 마이그레이션
1952
작성한 질문수 2
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
먼저, 유익한 강의를 나눠 주셔서 감사합니다.
springboot 3.1버전을 사용 하면서 안되는 부분에 대해서 질문드립니다.
강의 간에 진행되는 springboot 버전을 2.7 버전으로 설정 하셨는데, end of support가 11월로 예정이 되어 있더라구요,,

현재 섹션 9. OAuth 2.0 Client - Social Login (Google, Naver, KaKao) + FormLogin 파트까지 3.1 버전으로 마이그레이션 진행 하려 했으나, config의 메서드가 Deprecated된 부분을 해결 해야했습니다.
공식 문서를 참고해서 일단 제가 바꾼 부분은 다음과 같습니다.
authorizeRequests -> authorizeHttpRequests
antMatchers -> requestMatchers
http.formLogin(), http.logout() -> 람다 사용
import io.security.oauth2.springsecurityoauth2.service.CustomOAuth2UserService;
import io.security.oauth2.springsecurityoauth2.service.CustomOidcUserService;
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.configuration.WebSecurityCustomizer;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.web.SecurityFilterChain;
@RequiredArgsConstructor
@EnableWebSecurity
public class OAuth2ClientConfig {
private final CustomOAuth2UserService customOAuth2UserService;
private final CustomOidcUserService customOidcUserService;
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().requestMatchers("/static/js/**", "/static/images/**", "/static/css/**", "/static/scss/**");
}
@Bean
SecurityFilterChain oauth2SecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> requests
.requestMatchers("/api/user")
.hasAnyRole("SCOPE_profile','SCOPE_email")
// .access("hasAuthority('SCOPE_profile')")
.requestMatchers("/api/oidc")
.hasRole("SCOPE_openid")
//.access("hasAuthority('SCOPE_openid')")
.requestMatchers("/")
.permitAll()
.anyRequest().authenticated());
http.oauth2Login(oauth2 -> oauth2.userInfoEndpoint(
userInfoEndpointConfig -> userInfoEndpointConfig
.userService(customOAuth2UserService)
.oidcUserService(customOidcUserService)));
http.logout(form -> form.logoutSuccessUrl("/"));
return http.build();
}
/*@Bean // hasAuthority 일경우 정의하지 않는다
public GrantedAuthoritiesMapper grantedAuthoritiesMapper(){
SimpleAuthorityMapper simpleAuthorityMapper = new SimpleAuthorityMapper();
simpleAuthorityMapper.setPrefix("ROLE_");
return simpleAuthorityMapper;
}*/
@Bean
public GrantedAuthoritiesMapper customAuthorityMapper() {
return new CustomAuthorityMapper();
}
}
이렇게 수정을 하니 메인 페이지("/")가 무조건 로그인 페이지("/login)로 리다이렉트 되는 문제(?)를 발견 했습니다.
이 부분에 대해서 어떻게 해결해야할지 여쭤보고 싶습니다.
답변 2
1
혹시 전체 소스가 필요하신거라면 제가 메일을 보내드려도 될까요?
1
가능하면 전체 소스를 공유해 주시면 감사하겠습니다.
2
답변 해주셔서 감사합니다.
oauth2Login-SocialLogin 브랜치에서 OAuth2ClientConfig 클래스와 build.gradle 클래스만 다음과 같이 수정했습니다.
소스 코드는 https://github.com/onjsdnjs/spring-security-oauth2/tree/oauth2Login-SocialLogin 위와 같습니다.
build.gradle
plugins {
id 'org.springframework.boot' version '3.1.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'io.security.oauth2'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
tasks.named('test') {
useJUnitPlatform()
}
OAuth2ClientConfig
import io.security.oauth2.springsecurityoauth2.service.CustomOAuth2UserService;
import io.security.oauth2.springsecurityoauth2.service.CustomOidcUserService;
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.configuration.WebSecurityCustomizer;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.web.SecurityFilterChain;
@RequiredArgsConstructor
@EnableWebSecurity
public class OAuth2ClientConfig {
private final CustomOAuth2UserService customOAuth2UserService;
private final CustomOidcUserService customOidcUserService;
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().requestMatchers("/static/js/**", "/static/images/**", "/static/css/**", "/static/scss/**");
}
@Bean
SecurityFilterChain oauth2SecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> requests
.requestMatchers("/api/user")
.hasAnyRole("SCOPE_profile','SCOPE_email")
// .access("hasAuthority('SCOPE_profile')")
.requestMatchers("/api/oidc")
.hasRole("SCOPE_openid")
//.access("hasAuthority('SCOPE_openid')")
.requestMatchers("/")
.permitAll()
.anyRequest().authenticated());
http.oauth2Login(oauth2 -> oauth2.userInfoEndpoint(
userInfoEndpointConfig -> userInfoEndpointConfig
.userService(customOAuth2UserService)
.oidcUserService(customOidcUserService)));
http.logout(form -> form.logoutSuccessUrl("/"));
return http.build();
}
/*@Bean // hasAuthority 일경우 정의하지 않는다
public GrantedAuthoritiesMapper grantedAuthoritiesMapper(){
SimpleAuthorityMapper simpleAuthorityMapper = new SimpleAuthorityMapper();
simpleAuthorityMapper.setPrefix("ROLE_");
return simpleAuthorityMapper;
}*/
@Bean
public GrantedAuthoritiesMapper customAuthorityMapper() {
return new CustomAuthorityMapper();
}
}
authorization-server 라이브러리 질문이 있습니다.
0
75
1
loadUser 중 Missing attribute 'preferred_username' in attributes 에러 발생
0
76
2
JWT 조회 에 대한 질문
0
70
1
password grant 방식 에러 응답
0
88
3
FormLoginConfigure에서 생성하는 필터
0
77
2
현업에서 springboot를 3.5.5 를 사용해서 공부중인데...
0
282
2
Jdbc 관련 강의 및 깃헙 문의
0
77
1
OAuth2AuthorizedClient 이해 및 활용 강의 내용 질문
0
208
1
UserInfo 엔드포인트 요청 실습
0
73
1
RFC 문서에서의 AccessToken 발급 방식 궁금한점
0
150
1
강의자료.zip 를 다운로드 받았는데 압축이 풀리지 않습니다. 확인 부탁드려요
0
139
2
OIDC SSO 관련 질문 입니다.
0
130
1
AuthenticationEntryPoint 강의 누락 문의
0
122
1
cors설정방법
0
115
1
jwt decoder 토큰 검증 시 질문
0
221
1
클라이언트에서 userinfo 엔드포인트 호출 시 질문
0
184
2
JOSE 구성요소의 api에 관한 질문
0
140
2
스프링 부트 3버전으로 따라가시는 분들 참고하세요
1
528
1
CustomOAuth2AuthenticationFilter 구현 중 질문
0
145
2
AuthenticationManager 생성시점
0
117
1
FormLogin과 Oauth2Client 둘 중 사용하는 시점
0
127
1
postman userinfo 엔드포인트 질문
0
135
2
강의 수강신청하고 듣기 전입니다 질문있습니다.
0
113
1
인증 코드를 통해 발급 받은 토큰의 관리
0
198
1





