728x90
urlrewritefilter를 이용한 URL 리다이렉션
리다이렉션은 DNS 서버, 웹 서버, 웹 어플리케이션에서 할 수 있다.
이번에는 Spring Boot 내에서 조건이 맞으면 해당 URL로 리다이렉션하는 방법을 알아보자.
우선 spring starter project 를 이용해 urlrewrite 라는 스프링부트 프로젝트를 생성한다.
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/
http://www.urlrewrite.co.kr 으로 리다이렉션 되어 사이트에 연결할 수 없음으로 나온다.
샘플소스 코드를 첨부한다.
728x90
'Programming > Spring Boot' 카테고리의 다른 글
[Spring Boot] Gradle을 이용한 Profile(개발/운영) 구분 설정 (0) | 2022.12.02 |
---|---|
[Spring Boot] Jasypt를 이용한 암호화 (0) | 2022.11.30 |
[Spring Boot] PostgreSQL 연결을 위한 JPA 설정 (0) | 2022.07.28 |
Spring Boot 기본 설정 Port, ContextPath, Session Timeout (0) | 2022.07.22 |
Spring Boot 웹 프로젝트 생성 (0) | 2022.07.08 |
댓글