UrlRewRiteFilter를 사용하여 레거시 서버에서 페이지를 이동하는 방법

StackOverflow https://stackoverflow.com//questions/23034294

  •  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>

UrlrewriteFilter는 이러한 종류의 일을 지원하거나 운이 좋지 않습니까?

도움이 되었습니까?

해결책

여기에 내가 일어난 솔루션이 있습니다. 다시 쓰기 필터를 사용하면 규칙이 일치 할 때 호출되는 메소드를 지정할 수 있습니다.이 콜백 메소드를 사용하여 현재 환경을 기반으로 서버 컨텍스트를 조회합니다.이 환경 특정 컨텍스트는 "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);
    }
}
.

그것은 아주 잘 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top