작성
·
543
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
github에 올려주신 version2, 3 둘 다
빨간줄뜨고 6.1 이후로 deprecated 되었다고 나오는데
설정 어떻게 해야 할까요? ㅜㅜ
스프링부트 시큐리티2강 - 시큐리티 설정 듣고있습니다.
답변 3
1
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을 참고하는 것도 좋습니다.
위의 방법들을 통해 최신 버전에서 발생하는 deprecated 문제를 해결할 수 있을 것입니다. 개발에 성공하시길 바랍니다!
감사합니다. 앞서 코드올려주신분들 + gpt의 도움을 받아 어찌어찌 돌아가게는 했습니다 ㅎㅎ