반응형
웹 설정을 추가로 정의하기 위해 WebMvcConfigurer를 구현해주는 WebConfig 클래스를 작성하자
1. WebConfig 설정하기
1-1. SSR(Server Side Rendering)전용 WebConfig 설정하기
- WebMvcConfigurer를 구현하는 WebConfig 클래스를 작성한다. WebConfig는 웹 애플리케이션의 웹 설정을 정의하는 클래스다. 여기서는 인터셉터, 뷰 컨트롤러, 정적 리소스 핸들러 등을 설정한다.
@Slf4j
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final JwtTokenInterceptor jwtTokenInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(jwtTokenInterceptor)
.addPathPatterns("/**") // 모든 URL에 대해 JWT 토큰 검사를 적용합니다.
.excludePathPatterns("/user/login", "/login", "/main/rootPage"); // 로그인 페이지는 JWT 토큰 검사에서 제외합니다.
}
/**
* 이 배열은 정적 리소스가 위치할 수 있는 경로를 나열하고 있다. 이 경로들은 addResourceHandlers 메서드에서 사용된다.
*/
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/static/",
"classpath:/public/",
"classpath:/",
"classpath:/resources/",
"classpath:/META-INF/resources/",
"classpath:/META-INF/resources/webjars/"
};
/**
* 뷰 컨트롤러를 추가할때 사용된다. 여기서는 루트 URL("/")에 접근했을 때 "/login"으로 리다이렉트하도록 설정하고 있다.
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
log.debug("[+] WebConfig Start !!! ");
registry.addRedirectViewController("/", "/login");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
/**
* 정적 리소스를 처리하는 핸들러를 추가하는데 사용된다.
* 여기서는 모든 요청("/**")에 대해 CLASSPATH_RESOURCE_LOCATIONS에 지정된 경로에서 리소스를 찾도록 설정하고 있다.
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}
}
1-2. addInterceptors 메서드
- 이 메서드의 역할은 인터셉터를 추가하는 것이다.
- JwtTokenInterceptor를 모든 URL(/**)에 적용하되, 로그인 관련된 URL은 제외하도록 설정하고 있다.
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(jwtTokenInterceptor())
.addPathPatterns("/**") // 모든 URL에 대해 JWT 토큰 검사를 적용합니다.
.excludePathPatterns("/user/login", "/login", "/main/rootPage"); // 로그인 페이지는 JWT 토큰 검사에서 제외합니다.
}
1-3. CLASSPATH_RESOURCE_LOCATIONS 배열 선언
- 이 배열은 정적 리소스가 위치할 수 있는 경로를 나열하고 있다. 이 경로들은 addResourceHandlers 메서드에서 사용된다.
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/static/",
"classpath:/public/",
"classpath:/",
"classpath:/resources/",
"classpath:/META-INF/resources/",
"classpath:/META-INF/resources/webjars/"
};
1-4. addViewControllers 메서드
- 이 메서드는 뷰 컨트롤러를 추가하는 역할을 한다.
- 루트 URL(/)에 접근했을 때 /login으로 리다이렉트하도록 설정하고 있다.
@Override
public void addViewControllers(ViewControllerRegistry registry) {
log.debug("[+] WebConfig Start !!! ");
registry.addRedirectViewController("/", "/login");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
1-5. addResourceHandlers 메서드
- 이 메서드는 정적 리소스를 처리하는 핸들러를 추가하는 역할을 한다.
- 모든 요청(/**)에 대해 CLASSPATH_RESOURCE_LOCATIONS에 지정된 경로에서 리소스를 찾도록 설정했다.
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}
2. 코드의 동작 이해
2-1. 상호작용 및 동작 시점
- WebConfig클래스는 SpringBoot 애플리케이션의 시작 시점에 로드되어 웹 설정을 초기화한다.
- 사용자가 웹 애플리케이션에 요청을 보낼 때, JwtTokenInterceptor 클래스가 해당 요청을 가로채서 JWT 토큰의 유효성을 검사한다. 로그인 관련된 URL은 이 검사에서 제외된다.
- 루트 URL(/)에 접근하면, 사용자는 /login 페이지로 redirect 된다.
다음 포스트를 통해 JWT 필터를 적용시켜보자👇🏻👇🏻
반응형
'Spring Security' 카테고리의 다른 글
Spring Boot 3 & Security 6 시리즈: JWT 검증 인터셉터 작성하기 (6편) (0) | 2023.08.07 |
---|---|
Spring Boot 3 & Security 6 시리즈: AuthenticationProvider, 인증 핸들러 구현하기 (5편) (0) | 2023.08.07 |
Spring Boot 3 & Security 6 시리즈: JWT 인증 필터 JwtAuthorizationFilter 작성(4편) (0) | 2023.08.07 |
Spring Boot 3 & Security 6 시리즈: SecurityConfig 클래스 작성하기 (2편) (4) | 2023.08.07 |
Spring Boot 3 & Security 6 시리즈: JWT 로그인 폼 구현 (1편) (0) | 2023.08.07 |