UrlRewRiteFilter를 사용하여 레거시 서버에서 페이지를 이동하는 방법
-
21-12-2019 - |
문제
레거시 코드를 새로운 구현으로 이동시키는 과정에 있습니다. 레거시 코드는 "Legacy"를위한 "L"접두사가있는 서버가 호스팅됩니다. 각 페이지가 새 서버로 이동하므로 URLRewRiteFilter가 URL을 변경하기를 원합니다. 그래서 나는 이것을 할 필요가있다 :
: http://lapp.company.com/page1.aspx to : http://app.company.com/pageone
각 경우 서버 이름이 약간 변경되는 여러 가지 다른 환경 (Dev, Stage, Production)에서 작동해야하기 때문에 상황이 더욱 복잡해집니다. 예 :
로컬 : http://applocal.companydev.com:8080 dev : http://app.companydev.com sttp : http://app.companystage.com prod : http://app.company.com/a>
<rule>
<from>^/offers/buyKit.aspx$</from>
<to type="redirect">%{context-path}/offers/buyKit</to>
</rule>
.
http://lapp.company.com/offers/buykit.aspx 들어온다, 나는 그것을 http://app.company.com/offers/buykit kn.now a>
해결책
여기에 내가 일어난 솔루션이 있습니다. 다시 쓰기 필터를 사용하면 규칙이 일치 할 때 호출되는 메소드를 지정할 수 있습니다.이 콜백 메소드를 사용하여 현재 환경을 기반으로 서버 컨텍스트를 조회합니다.이 환경 특정 컨텍스트는 "to"to "요소에서 사용할 수있는 요청의 속성으로 설정됩니다.
여기서는 XML 파일에서 업데이트 된 규칙입니다.
<rule>
<from>^/offers/buyKit.aspx$</from>
<run class="com.company.app.UrlHelper" method="setMyContext"/>
<to type="redirect" last="true">%{attribute:myContext}/offers/buyKit</to>
</rule>
.
와 여기서 컨텍스트 설정 방법이 있습니다.
public class UrlHelper {
private static final String APP_BASE_URL = "app.company.base.url";
private Properties appConfig;
public void setMyContext(HttpServletRequest request, HttpServletResponse response) throws IOException {
if (appConfig == null) {
appConfig = (Properties) StaticSpringApplicationContext.getBean("appConfig");
Assert.notNull(appConfig, "Unable to get appConfig.");
}
String appBase = appConfig.getProperty(APP_BASE_URL);
Assert.hasText(appBase, "Could not find property: " + APP_BASE_URL);
request.setAttribute("myContext", appBase);
}
}
.
그것은 아주 잘 작동합니다.