Spring Boot 도메인 변경

최근에 예전에 만들어진 홈페이지를 Spring Boot로 변경하면서 기존에 사용하던 .do 주소를 제외하였습니다. 처음엔 아래와 같이 main 페이지만 기존 주소도 맵핑 되도록 하였습니다.

@GetMapping(value={"/", "/main", "/main.do"})
public String getMainPage()
{
    return "main";
}

하지만 이미 포탈 등에 노출된 .do url이 노출된 상태였기 때문에 .do 접근이 404 오류가 발생하였습니다.

따라서 기존에 사용하던 모든 페이지의 .do 주소를 맵핑하는 작업이 필요하게 되었고 Fillter를 이용하여 처리 하도록 수정하였습니다.

또한 301 응답코드를 주어 검색엔진에서 변경된 주소를 수집 하도록 처리 하였습니다.

Step 1. Filter 생성

package net.my.home.global.config.filter;
...
    
@WebFilter(urlPatterns = "*.do")
public class UrlRewriteFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if (request instanceof HttpServletRequest) {
            HttpServletResponse httpServletResponse = (HttpServletResponse) response;
            httpServletResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
            httpServletResponse.setHeader("Location", getUrl((HttpServletRequest)request));
        }else {
            chain.doFilter(request, response);
        }
    }

    private String getUrl(HttpServletRequest request) {
        String url = request.getRequestURL().toString().replace(".do", "");
        return !StringUtils.hasText(request.getQueryString()) ?
                url : String.format("%s?%s", url, request.getQueryString());
    }
}

Step 2. Filter 등록 처리

@ServletComponentScan(basePackages = "net.my.home.global.config.filter")
@SpringBootApplication
public class HomeApplication {
    public static void main(String[] args) {
        SpringApplication.run(HomeApplication.class, args);
    }
}

Step 3. 브라우저에서 .do 주소 테스트 해보기

image-20220310111741219

image-20220310111759664

정상적으로 .do가 제거된 주소로 리다이렉트 된 모습입니다.

댓글남기기