방구석 컴퓨터/방구석 스프링
스프링 시큐리티 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 에러 메시지를 던져준다는 것입니다.
아무튼 결론은. 설정파일을 메인 클래스와 같은 패키지 안에 놓자
반응형