본문 바로가기
Programming/Spring Boot

Spring Boot urlrewritefilter를 이용한 URL 리다이렉션

by 주리니e 2022. 7. 5.
728x90

urlrewritefilter를 이용한 URL 리다이렉션

리다이렉션은 DNS 서버, 웹 서버, 웹 어플리케이션에서 할 수 있다.
이번에는 Spring Boot 내에서 조건이 맞으면 해당 URL로 리다이렉션하는 방법을 알아보자.

우선 spring starter project 를 이용해 urlrewrite 라는 스프링부트 프로젝트를 생성한다.

urlrewrite 프로젝트 생성

 

URL 리다이렉션만 테스트 하므로 모두 패스..

 

생성된 프로젝트

 

plugins {
	id 'org.springframework.boot' version '2.7.1'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
	id 'war'
}

group = 'kr.co.urlrewrite'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
	flatDir {
		dirs 'libs'
	}
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	
	implementation name: 'urlrewritefilter-4.0.4'
}

tasks.named('urlrewrite') {
	useJUnitPlatform()
}​

build.gradle 파일에
implementation 'org.tuckey:urlrewritefilter:4.0.4'
추가 후 Gradle Refresh를 하여 라이브러리를 다운받습니다.

 

package kr.co.urlrewrie.filter;

import java.io.InputStream;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.tuckey.web.filters.urlrewrite.Conf;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
import org.tuckey.web.filters.urlrewrite.UrlRewriter;

public class CustomURLRewriter extends UrlRewriteFilter {
	private UrlRewriter urlRewriter;

	@Autowired
	Environment env;

	@Override
	public void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
		try {
			ClassPathResource classPathResource = new ClassPathResource("urlrewrite.xml");
			InputStream inputStream = classPathResource.getInputStream();
			Conf conf1 = new Conf(filterConfig.getServletContext(), inputStream, "urlrewrite.xml", "");
			urlRewriter = new UrlRewriter(conf1);
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}

	@Override
	public UrlRewriter getUrlRewriter(ServletRequest request, ServletResponse response, FilterChain chain) {
		return urlRewriter;
	}

	@Override
	public void destroyUrlRewriter() {
		if (urlRewriter != null)
			urlRewriter.destroy();
	}
}

src/main/java/kr/co/urlrewrite/filter 패키지 생성 후 UrlRewriteFilter를 상속받은 CustomURLRewriter 클래스를 생성한다.

 

package kr.co.urlrewrite;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;

import kr.co.urlrewrite.filter.CustomURLRewriter;

@SpringBootApplication
public class UrlrewriteApplication {

	public static void main(String[] args) {
		SpringApplication.run(UrlrewriteApplication.class, args);
	}

	@Bean
	public FilterRegistrationBean<CustomURLRewriter> tuckeyRegistrationBean() {
		final FilterRegistrationBean<CustomURLRewriter> registrationBean = new FilterRegistrationBean<CustomURLRewriter>();
		registrationBean.setFilter(new CustomURLRewriter());
		return registrationBean;
	}
}

UrlrewriteApplication에 tuckeyRegistrationBean 메소드를 추가한다.

 

<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE urlrewrite
    PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
    "http://www.tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite>
<rule>
    <name>Domain Name Check</name>
    <condition name="host" operator="equal" next="or">localhost</condition>
    <condition name="host" operator="equal">urlrewrite.co.kr</condition>
    <from>^(.*)$</from>
    <to type="redirect">http://www.urlrewrite.co.kr$1</to>
</rule>
</urlrewrite>

src/main/resources/urlrewrite.xml 을 넣어준다.
도메인 네임 체크 조건을 넣는다.
위 조건문을 보면 호스트가 localhost이거나 urlrewrite.co.kr로 접근하면
http://www.urlrewrite.co.kr(존재하지 않는 임의 주소)로 리다이렉션 시켜준다는 의미다.
다양한 설정이나 규칙은 아래 URL에서 확인이 가능하다.
http://tuckey.org/urlrewrite/manual/3.0/

 

프로젝트 우클릭 - Run As - SpringBoot App : urlrewrite가 적용되지 않았을 경우

 

정상적으로 적용된 경우

 

http://www.urlrewrite.co.kr 으로 리다이렉션 되어 사이트에 연결할 수 없음으로 나온다.

 

샘플소스 코드를 첨부한다.

urlrewrite.zip
0.08MB


참고 : http://tuckey.org/urlrewrite/manual/3.0/

728x90

댓글