인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

seohyeonjin787님의 프로필 이미지

작성한 질문수

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

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

2024.06기준) 최근 SecurityConfig 설정 문의

작성

·

714

0

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

 

github에 올려주신 version2, 3 둘 다

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

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

 

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

답변 3

1

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

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

seohyeonjin787님의 프로필 이미지

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

0

아름님의 프로필 이미지

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

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



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

seohyeonjin787님의 프로필 이미지

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

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

 

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 인턴님의 프로필 이미지

안녕하세요, 인프런 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 문제를 해결할 수 있을 것입니다. 개발에 성공하시길 바랍니다!