• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

섹션2 9강까지 듣고 질문이 있습니다. 스프링부트 버전을 다운그레이드해도 될까요?

24.03.31 01:01 작성 조회수 132

0

강의나 자료의 최근 버전은 2.5.7이고, 현재 제 프로젝트의 버전은 3.2.3입니다.

스프링부트가 업그레이드 되면서, 바뀐 부분에 대해서도 커뮤니티와 스프링 공식 문서를 보고 반영하였습니다.

하지만 여전히 같은 에러가 반복되고, 일주일 넘게 붙잡았지만 당장 남은 시간은 없어 촉박한 상황입니다.

  • 수정한 부분:

     

    package com.cos.security1.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Lazy;
    import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.web.SecurityFilterChain;
    
    import com.cos.security1.config.oauth.PrincipalOauth2UserService;
    
    @Configuration // IoC 빈(bean)을 등록
    @EnableWebSecurity // 위 활성화 ⇒ 이를 활성화하면 스프링 시큐리티 필터가 스프링 필터체인에 등록이 된다. 
    //특정 주소 접근시 권한 및 인증을 위한 어노테이션 활성화
    @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) // secured 어노테이션 활성화, preAuthorize&postAuthorize 어노테이션 활성화
    public class SecurityConfig {
    
    	// Oauth 관련
    	@Autowired
    	private PrincipalOauth2UserService principalOauth2UserService;
    	
    	// @Bean을 적으면 -> 해당 메서드의 리턴되는 오브젝트를 IoC로 등록해준다.
    	@Bean
    	public BCryptPasswordEncoder encodePwd() {
    		return new BCryptPasswordEncoder();
    	}
    	
    	@Bean
    	public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    		http.csrf(cs-> cs.disable());
    		
    		http
    		.authorizeHttpRequests((authz) -> authz
    			.requestMatchers("/user/**").authenticated() // authenticated(): 인증 완료해야 접근 가능
    			.requestMatchers("/manager/**").hasAnyAuthority("ROLE_ADMIN","ROLE_MANAGER") //인증 후, admin이나 manager권한 있어야 함
    			.requestMatchers("/admin/**").hasAuthority("ROLE_ADMIN")//인증 후, admin 권한 있어야 함
    			.anyRequest().permitAll()); // anyRequest(): 그 외 나머지 리소스들, permitAll(): 설정한 리소스의 접근을 인증절차 없이 허용한다는 의미
    		
    		http.formLogin(form -> form // 로그인 페이지와 기타 로그인 처리 및 성공 실패 처리를 사용하겠다는 의미
    			.loginPage("/loginForm") // 사용자가 따로 만든 로그인 페이지를 사용하려고 할때 설정
    			.loginProcessingUrl("/login") //로그인 즉 인증 처리를 하는 URL을 설정. 
    										//해당 URL이 호출되면 시큐리티가 낚아채서 대신 로그인 인증처리를 수행. 
    										// 따라서 Controller에 /login을 만들지 않아도 된다.
    			.defaultSuccessUrl("/")); // 정상적으로 인증성공 했을 경우 이동하는 페이지
    		
    		http.oauth2Login(oauth2 -> oauth2 // oauth
    			.loginPage("/loginForm") // 구글로그인이 완료된 후, 후처리가 필요
    								// !Tip! 구글 로그인이 완료가 되면 코드 X, 액세스토큰+사용자프로필 정보를 한방에 받음
    			.userInfoEndpoint(userInfo -> userInfo
    					.userService(principalOauth2UserService)));
    		
    		return http.build();
    	}
    }
    
  • 에러나는 부분:

java.lang.NullPointerException: Cannot invoke "com.cos.security1.config.auth.PrincipalDetails.getUser()" because "principalDetails" is null

 

그래서 결론적으로는 프로젝트의 버전을 2.5.7로 다운그레이드해도 괜찮을지 여쭙고 싶습니다...

프로젝트 내 다른 라이브러리도 고려해야겠지만 현업이나 다른 분들도 프로젝트할 때 버전 낮춰서 진행하는지 그래도 괜찮은지 궁금해서 질문드립니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.01

안녕하세요, 인프런 AI 인턴입니다.

김민정님, 스프링부트 버전을 다운그레이드하는 것은 기술적인 문제 해결을 위한 하나의 방법이 될 수 있습니다. 여러분이 현재 작업 중인 프로젝트나 라이브러리의 호환성 문제로 인해 발생하는 문제를 완화시킬 수 있기 때문입니다. 하지만, 몇 가지 고려해야 할 점이 있습니다.

  1. 버전을 다운그레이드하기 전에 현재 버전에서 발생하는 문제의 근본 원인을 찾아 해결하는 것이 중요합니다. 문제가 스프링부트의 버전 업그레이드로 인한 것인지, 아니면 다른 구성 요소의 문제인지 확인해보세요.
  2. 프로젝트 내 다른 라이브러리와의 호환성을 검토해야 합니다. 버전을 다운그레이드할 경우, 현재 사용하고 있는 다른 라이브러리의 최신 버전과 호환되지 않을 위험이 있습니다. 문제가 될 수 있는 라이브러리가 있는지 체크하세요.
  3. 장기적인 지원 및 보안 패치를 고려해야 합니다. 일반적으로 더 최신 버전의 소프트웨어는 보안 패치와 기능 개선이 더 잘 지원됩니다. 다운그레이드한 버전에 대한 지원 여부와 보안 이슈를 확인하세요.

현재 상황과 문제를 면밀히 검토한 후에, 프로젝트 요구사항과 팀의 상황에 맞게 최선의 결정을 하시기 바랍니다. 또한, 이와 관련하여 커뮤니티나 공식 문서 등을 통해 추가적인 정보를 얻는 것도 좋은 방법입니다.

다음은 스프링부트와 관련한 공식 문서 링크입니다. 필요한 정보를 찾는 데 도움이 될 수 있습니다.
- 스프링 시큐리티에 대한 더 많은 정보: Spring Security project page
- 스프링 부트 문서: Spring Boot Reference Documentation

문제 해결과 프로젝트 진행에 도움이 되기를 바랍니다.