그냥 내가 기억해 두려고 간단하게 올리는 글..
+ 혹시 나같은 사람 있을까 봐
@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/", "/docs/**", "/*.ico");
}
}
@Component
@RequiredArgsConstructor
public class AuthInterceptor implements HandlerInterceptor {
private final AuthService authService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
String authorizationHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
if (authorizationHeader == null) {
throw UNAUTHORIZED_USER;
}
String token = authService.extractToken(authorizationHeader, TOKEN_TYPE);
authService.validateToken(token);
return true;
}
}
내 프로젝트의 Config와 Config에 등장하는 AuthInterceptor 부분을 요약하자면 이렇다.
나는 분명 "/docs/**"과 "/*.ico"에 AuthInterceptor를 적용하지 않도록 URL 패턴을 지정해 놓았는데 자꾸 AuthInterceptor로 흘러들어가 authorizationHeader이 null이냐는 조건문에 걸려 UNAUTHORIZED_USER 에러를 반환했다. (개발자 도구로 보면 favicon.ico에서 에러가 났다고 했다. 근데 난 *.ico는 인터셉터 들어가지 말라고 했잖아..)
알아봤더니 페이지에서 사용하는 정적 리소스를 찾을 수 없으면 404를 반환하는 대신 에러 페이지를 렌더링 하려 한다. 하지만 스프링 시큐리티에서 사용자 권한이 없다는 이유로 이 요청을 거부하게 돼서 이렇게 에러가 나타났던 것 같다.
그래서 아래와 같이 excludePathPatterns에 "/resources/**", "/error" 를 추가했더니 정상적으로 docs 페이지에 접속할 수 있었다.
@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/", "/docs/**", "/*.ico", "/resources/**", "/error");
}
}
'Back-end' 카테고리의 다른 글
[JPA] Cascade 영속성 전이 (1) | 2024.04.19 |
---|---|
[JPA] EntityManager 핵심 기능 (0) | 2024.04.19 |
[Spring] 의존성 주입 시 @Autowired보다 생성자 주입을 권장하는 이유 (0) | 2024.02.28 |
[JPA] 영속성 컨텍스트의 동작원리와 이점 (0) | 2024.02.14 |
[JPA] OSIV(Open Session In View)란? (0) | 2023.09.21 |