Spring Boot 3 & Security 6 시리즈: WebConfig 클래스 작성 (3편)

2023. 8. 7. 22:03·Spring/Spring Security
반응형
 
 

웹 설정을 추가로 정의하기 위해 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. 상호작용 및 동작 시점

  1. WebConfig클래스는 SpringBoot 애플리케이션의 시작 시점에 로드되어 웹 설정을 초기화한다.

  2. 사용자가 웹 애플리케이션에 요청을 보낼 때, JwtTokenInterceptor 클래스가 해당 요청을 가로채서 JWT 토큰의 유효성을 검사한다. 로그인 관련된 URL은 이 검사에서 제외된다.

  3. 루트 URL(/)에 접근하면, 사용자는 /login 페이지로 redirect 된다.

 

 

다음 포스트를 통해 JWT 필터를 적용시켜보자👇🏻👇🏻

 

Spring Boot 3 & Security 6 시리즈: JWT 인증 필터 JwtAuthorizationFilter 작성(4편)

이번 포스트에서는 Jwt 인증 필터를 생성하고 Spring Security의 필터체인(FilterChain)에 연결하자 코드를 사용할때 import는 시리즈 2편에 작성된 구성을 확인해 보고 사용하는 것을 추천한다.(버전이 안

curiousjinan.tistory.com

 

반응형

'Spring > 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
'Spring/Spring Security' 카테고리의 다른 글
  • Spring Boot 3 & Security 6 시리즈: AuthenticationProvider, 인증 핸들러 구현하기 (5편)
  • Spring Boot 3 & Security 6 시리즈: JWT 인증 필터 JwtAuthorizationFilter 작성(4편)
  • Spring Boot 3 & Security 6 시리즈: SecurityConfig 클래스 작성하기 (2편)
  • Spring Boot 3 & Security 6 시리즈: JWT 로그인 폼 구현 (1편)
Stark97
Stark97
dig04059@gmail.com 링크드인 소통도 환영합니다!
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (256) N
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • AI (7) N
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (15)
      • DDD (12)
      • gRPC (9)
      • Apache Kafka (19)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • 채팅 서비스 (1)
      • 팀 Pulse (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
Spring Boot 3 & Security 6 시리즈: WebConfig 클래스 작성 (3편)
상단으로

티스토리툴바