인프런 커뮤니티 질문&답변

seohyeonjin787님의 프로필 이미지

작성한 질문수

스프링부트 시큐리티 & JWT 강의

섹션0~섹션1 최신버전 업데이트 github 주소

2024.06기준) 최근 SecurityConfig 설정 문의

작성

·

523

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

github에 올려주신 version2, 3 둘 다

빨간줄뜨고 6.1 이후로 deprecated 되었다고 나오는데

설정 어떻게 해야 할까요? ㅜㅜ

 

스프링부트 시큐리티2강 - 시큐리티 설정 듣고있습니다.

답변 3

1

최주호님의 프로필 이미지
최주호
지식공유자

이 부분은 제가 강의를 업데이트 해야될것 같아요!!

감사합니다. 앞서 코드올려주신분들 + gpt의 도움을 받아 어찌어찌 돌아가게는 했습니다 ㅎㅎ

0

혹시 어떤 식으로 코드 변경하셨는지 알 수 있을까요? 저는 이것저것 바꿔봤는데

java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.security.servlet.SpringBootWebSecurityConfiguration$SecurityFilterChainConfiguration



이 에러가 나서요 관련해서 pom.xml 설정도 했는데 에러가 안 없어지네요

죄송해요 제가 너무 늦게 봤죠,,

제가 등록했던 코드 올려드릴게요

 

package myproject.web.config;

import lombok.RequiredArgsConstructor;
import myproject.web.config.oauth.PrincipalOauth2UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
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.web.SecurityFilterChain;

//1.코드받기(인증) 2. 엑세스토큰(권한)
//3. 사용자프로필 정보를 가져오고 4-1. 그 정보를 토대로 회원가입을 자동으로 진행시키기도 함.
//4-2. (이메일, 전화번호, 이름, 아이디) ... 쇼핑몰 -> (집주소), 백화점몰 -> (vip등급, 일반등급) 추가적인 회원가입창이 나오게.
//하지만, 이메일, 전화번호, 이름, 아이디만 필요하다면 이 정보만 가지고 회원가입을 자동으로 시킴.

@Configuration
@EnableWebSecurity //스프링 시큐리티 필터(SecurityConfig)가 스프링 필터체인에 등록이 됩니다.
@EnableMethodSecurity(securedEnabled = true, prePostEnabled = true) //@Secured 어노테이션 활성화. 컨트롤러 메서드에 @Secured("Role_admin") 이런 식으로. 두번째는 PreAuthorize 어노테이션 활성화. @PreAuthorize("hasRole("ROLE_User")") 이런식으로. 얘는 메서드 실행되기 직전에 실행됨. 여러 개의 권한설정 가능. @PostAuthorize도 있음. 메서드가 종료되고 나서 실행인데 @Pre가 @Post도 포함. @Post만 쓸일은 잘 없음.
@RequiredArgsConstructor
public class SecurityConfig {

    private final PrincipalOauth2UserService principalOauth2UserService;

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        //SpringSecurity 6.1 이후로 람다식 설정으로 바뀜.
        http.csrf(AbstractHttpConfigurer::disable); //csrf 불필요

        http.authorizeHttpRequests(authorize -> authorize.requestMatchers("/myPage/**").authenticated() //인증만 되면 들어갈 수 있는 주소
                        //ADMIN으로 들어오게 되면 ADMIN 권한이 있어야함.
                        .requestMatchers("/admin/**").hasRole("ADMIN")
                        //다른 주소로는 다 권한이 허용
                        .anyRequest().permitAll())
                //권한이 필요한 경우 로그인 페이지로 이동함.,             //로그인 주소가 호출이 되면 스프링 시큐리티가 낚아채서 로그인 진행, 컨트롤러에 /login이 없어도 가능
                .formLogin(formLogin -> formLogin.loginPage("/loginForm").permitAll()
                        .loginProcessingUrl("/login") // 로그인 폼의 action 경로를 "/login"으로 설정
                        .defaultSuccessUrl("/logged"))// 로그인 성공 시 기본적으로 리디렉션되는 URL을 "/"로 설정
        //oauth로그인페이지나 일반 로그인페이지나 똑같이 설정
        .oauth2Login(oauth2Login -> oauth2Login.loginPage("/loginForm") //구글 로그인이 완료된 뒤의 후처리가 필요함
        // Tip.코드X,(엑세스토큰+사용자프로필정보O) 한 방에 받음. //userService의 타입은 OAuth2UserService? loadUser라는 함수에서 후처리가 됨.
              .userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint.userService(principalOauth2UserService)));

        return http.build();
    }
}

0

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

seohyeonjin787님, Spring Boot Security 설정에 있어서 deprecated된 부분에 대한 질문이시네요. SecurityFilterChain을 사용하여 보안 구성을 정의하는 방식은 Spring Boot 2.0부터 권장되는 방식입니다. 구체적으로, @Configuration 어노테이션을 사용하여 클래스를 정의하고, 내부에서 SecurityFilterChain 빈을 반환하는 메서드를 구현함으로써 기본적인 웹 애플리케이션 보안 설정을 사용자 정의할 수 있습니다.

@Configuration
public class SecurityConfig {

  @Bean
  public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
      http
          // 여기에 보안 설정을 세부적으로 추가합니다.
          .authorizeRequests()
          .anyRequest().authenticated()
          .and()
          .formLogin()
          .and()
          .httpBasic();
      return http.build();
  }
}

이런 방식으로 새로운 Spring Security 설정을 적용할 수 있습니다. deprecated된 클래스나 메서드 대신 SecurityFilterChain을 통해 보안 설정을 진행해 주세요.

더 자세한 정보가 필요하다면, Spring Boot Reference Documentation을 참고하는 것도 좋습니다.

  • Spring Security와 관련된 더 자세한 정보는 Spring Security project page를 참조하세요.
  • Spring Boot에서 기본 보안 설정을 해제하는 방법에 대해서는 여기에서 확인할 수 있습니다.

위의 방법들을 통해 최신 버전에서 발생하는 deprecated 문제를 해결할 수 있을 것입니다. 개발에 성공하시길 바랍니다!