방구석 컴퓨터/방구석 스프링

스프링 시큐리티 PermitAll() 안될때

CCEO 2023. 8. 3. 18:01
반응형

진짜 이거 해결하려고 시간을 얼마나 썼는지 모르겠습니다...

하지만 언제나 그렇듯 해결은 정말 어이없이 간단한 부분에서...


문제의 시작은 이렇습니다.

프로젝트에 스프링 시큐리티 + JWT를 통해 로그인을 구현하기 위해 이런저런 글들을 보며 따라 하고 있었는데

아니 글쎄... 가장 처음에 따라한 예제에서 막히는 겁니다.

 

maven에 dependecy를 추가하고 SecurityConfigure.java를 작성했습니다.

//SecurityConfiguration.class

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

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

        return httpSecurity
                .csrf(AbstractHttpConfigurer::disable)
                .formLogin(AbstractHttpConfigurer::disable)
                .authorizeHttpRequests(
                        authorize -> authorize
                                .requestMatchers("/pokemon").permitAll()
                                .anyRequest().authenticated()
                )
                .build();

    }
}

 

그런데 permitAll을 줬던 /pokemon에도 401이 나오더라구요.

그래서 처음에는 뭔가 저 관련 메서드 부분들에서 잘못된 것이 있는 줄 알았습니다.

하필이면 deprecated 된 것들도 많았고 버전도 바뀌고 변화가 많더라고요...

 

그렇게 해서 바꿨는데도 여전히 안돼서 거의 하루종일 이걸 가지고 씨름하던 중에

config 파일을 메인 클래스와 다른 패키지에 놓으면 인식하지 못해서 bean으로 등록되지 않을 수 있다

라는 사실을 알게 됩니다.

그래서 바로 위치를 바꿔봤죠... 그랬더니 해결됐습니다.

 

결국 아예 저 설정 파일이 bean에 등록되지 않았기 때문에 전혀 동작하지 않아서 401 에러 메시지를 줬던 겁니다.

 

그러다가 하나 더 알게 된 것은 위에처럼 아예 bean이 등록되지 않은 상황에서는 401 에러 메시지를 던져주고

설정파일이 bean에 잘 등록되었고, permit이 되지 않은 URL에 접근을 하게 되면 403 에러 메시지를 던져준다는 것입니다.

 

아무튼 결론은. 설정파일을 메인 클래스와 같은 패키지 안에 놓자

반응형