Project/Management

[Management] vue.js 빌드 파일 spring project 병합

lakelight 2022. 10. 14. 09:47
728x90
반응형
문제 인식

원래 생각했던 방식은 /src/resource/static 폴더에 빌드를 통해 만들어진 /js, /css index.html 파일을 넣고
http://localhost:8080/ 으로 접속하면 되겠다고 생각했습니다.

하지만 다른 설정이 필요했고, Spring Security도 적용되어 있어서 설정해줘야할 내용이 많았습니다.

 

설정 내용

config 파일이 모여있는 디렉터리에 WebMvcConfig 클래스를 생성하여 설정을 하였습니다.

import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;

import java.io.IOException;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        // addResourceHandlers 메서드를 이용해 어느 경로로 들어왔을때 매핑이 되어줄 것인지를 정의한다.
        registry.addResourceHandler("/**/*")
                //addResourceLocations 메서드를 이용하여 실제 파일이 있는 경로를 지정해 준다.
                .addResourceLocations("classpath:/static/")
                .resourceChain(true)
                // 요청을 /static/index.html 로 보내서 처리하겠다고 정의합니다.
                .addResolver(new PathResourceResolver(){
                    @Override
                    protected Resource getResource(String resourcePath, Resource location) throws IOException{
                        Resource requestResource = location.createRelative(resourcePath);
                        return requestResource.exists() && requestResource.isReadable()
                                ? requestResource : new ClassPathResource("/static/index.html");
                    }
                });
    }
}

 

baseURL + /login 접근 안되는 문제
http://localhost:8080/ -> http://localhost:8080/login [리다이렉트]

vue.js파일이 baseURL/ 로 접근을 했을 때
baseURL/login으로 접근되도록설정을 해야했습니다.

방법을 찾다가 Controller을 하나 더 만들어서 / 로 들어오는 요청을
/login으로 리다이렉트 시키도록 했습니다.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@RestController
public class homeController {
    @GetMapping("/")
    public void goLoginPage(HttpServletResponse response) throws IOException {
        String redirect_uri = "http://localhost:8080/login";
        response.sendRedirect(redirect_uri);
    }
}

 

728x90
반응형