반응형
오늘 스프링 시큐리티를 다루다가 겪었던 에러다.
과제 제출 5분전까지 해결을 못해서 일단 제출하고 고쳤다 ㅋ
문제
Spring security filter 추가
IllegalArgumentException : does not have a registered order 에러 발생
해결
@Bean
public JwtFilter jwtFilter() {
return new JwtFilter(jwtUtil, userDetailsService);
}
@Bean
public ExceptionHandleFilter exceptionHandleFilter() {
return new ExceptionHandleFilter();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable); // CSRF 는 쿠키 기반 공격이므로 불필요
// 기본 설정인 Session 방식은 사용하지 않고 JWT 방식을 사용하기 위한 설정
http.sessionManagement((sessionManagement) ->
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
http.authorizeHttpRequests((authz) -> authz
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // 정적 자원은 허용
.requestMatchers("/api/auth/**").permitAll() // 로그인 및 회원가입은 허용
.anyRequest().authenticated()); // 나머지 엔드포인트는 검증
http.addFilterBefore(exceptionHandleFilter(), JwtFilter.class);
http.addFilterBefore(jwtFilter(), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
http.addFilterBefore(exceptionHandleFilter(), JwtFilter.class);
http.addFilterBefore(jwtFilter(), UsernamePasswordAuthenticationFilter.class);
우선 이 코드는 시큐리티config 클래스의 일부 메서드인데, 문제는 필터를 추가하는 2줄에서 발생했다.
Caused by: java.lang.IllegalArgumentException: The Filter class sparta.todoapp.global.config.security.jwt.JwtFilter does not have a registered order
실행하니까 자꾸 이런 에러가 뜨는데, 에러 스택을 봐보니 필터 추가 부분 첫 번째 줄을 가리키고 있었다.
열심히 "does not have a registered order" 부분 구글링 해봐도 안 나온다.. 왜지?? 하다가 order.. 순서가 잘못됐나... 하다가 필터 추가하는 부분 바꿔보니 됐다. ㅋㅋ
http.addFilterBefore(jwtFilter(), UsernamePasswordAuthenticationFilter.class);
http.addFilterBefore(exceptionHandleFilter(), JwtFilter.class);
이렇게 하니 됐다. ㅋㅋ
왜인지 생각을 해보니, 나는 우선 JWT 처리하다가 생기는 예외를 ExceptionHandlerFilter 를 제일 앞에 두어 예외처리용 필터를 만드려고 했다. 즉, ExceptionHandlerFilter -> JwtFilter 이렇게.
그래서 첫 번째 필터 추가하는 코드처럼 작성했는데, 생각해보면 코드는 위에서 아래로 실행이 되므로, exceptionHandlerFilter를 JwtFilter.class 앞에 추가를 하려는데 아직 jwtFilter 가 등록이 안 되어 있고, 그래서 등록된 순서가 없다는 에러가 난 거였다 !!!
두 번째 필터추가하는 코드는 이미 시큐리티에서 UsernamePasswordAuthenticationFilter 를 추가해두어서 정상적으로 실행이 된 것.
...
시큐리티 정말 어렵다..
반응형
'TIL ✍️' 카테고리의 다른 글
23년 11월 22일(수요일) - 37번째 TIL (0) | 2023.11.22 |
---|---|
23년 11월 21일(화요일) - 36번째 TIL (1) | 2023.11.21 |
23년 11월 17일(금요일) - 34번째 TIL (2) | 2023.11.17 |
23년 11월 16일(목요일) - 33번째 TIL (0) | 2023.11.16 |
23년 11월 14일(화요일) - 32번째 TIL (0) | 2023.11.14 |