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

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

식빵님의 프로필 이미지
식빵

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

요청 기반 권한 부여 - HttpSecurity.securityMatcher()

(공유) 이제는 securityMatcher 지정 안 한 FilterChain 의 순서가 맨 앞에 있으면 에러를 뱉어냅니다.

해결된 질문

작성

·

67

·

수정됨

0

요청 기반 권한 부여 - HttpSecurity.securityMatch 강의 (14분 25초) 를 듣고 코드를 똑같이 따라 치고
실행해보니 에러가 뜨면서 동작을 안 하더군요.

 

spring boot 버전은 3.4.1 + spring security 6.4.2 로 테스트를 해봤습니다.

 

조사를 해보니 에러를 뱉는 건 스프링 시큐리티의 WebSecurity 클래스였고, 아래 빨간 박스 친 부분에서 에러를 뱉습니다.

 

idea64_V9COPA1Q91.png

 

이 코드는 securityMatcher 를 설정 안 한 SecurityFilterChain, 즉 anyRequestFilterChain 이 모든 FilterChain 들 보다 항상 뒤편에 있어야 되는 것을 보장하기 위한 유효성 검사를 위한 것입니다.

 

선생님이 강의를 찍던 당시와 달라진 내용이 아닐까 싶습니다.

 

아무튼 이를 우회해서 테스트를 할 수 있는데,
선생님이 작성하신 코드에서 딱 한줄만 추가해주면 됩니다.

 

@Bean
@Order(1)
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
	
	// !!!!!!!!!!!!!!! 아래 한 줄 추가 !!!!!!!!!!!!!!!
	http.securityMatchers(matcher -> matcher.requestMatchers("/**"));

	http.authorizeHttpRequests(auth -> {
			auth.anyRequest().authenticated();
        })
	.formLogin(Customizer.withDefaults());
	
	return http.build();
}


@Bean
public SecurityFilterChain securityFilterChain2(HttpSecurity http) throws Exception {
	http.securityMatchers(matchers 
             -> matchers.requestMatchers("/api/**", "/oauth/**"));
	http.authorizeHttpRequests(auth -> {
		auth.anyRequest().permitAll();
	});
	return http.build();
}

 

이상으로 내용 공유를 마칩니다.

 

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
식빵님의 프로필 이미지
식빵

작성한 질문수

질문하기