質問

そのため、ユーザーのurlrewritefilterを使用して、ウェブサービス製品の古いバージョンにアクセスしようとするユーザーをリダイレクトしたいと考えています。 www.blah.com/oldversion/blah/blahのリダイレクトのような簡単なものwww.blah.com/newversion/blah/blah

Tuckey'sのやや曖昧な指示に従って、これを適切にセットアップしようとして少し時間を費やしました Webサイト しかし、いくつかの困難があります。

正しい場所にファイルがあります。 urlrewrite.xmlは、web.xmlに隣接するWebAppパッケージのWeb-INFフォルダーにあります。 urlrewrite-3.2.0.jarは、Web-INFのLIBフォルダーにあります。

これが私のweb.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

<filter>
   <filter-name>UrlRewriteFilter</filter-name>
   <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>UrlRewriteFilter</filter-name>
   <url-pattern>/*</url-pattern>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter>
    <filter-name>Jersey Web Application</filter-name>
    <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
    </init-param>
    <!--
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
        <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
    </init-param>
    -->
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>project's.security.filter</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>project's.base.package</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>Jersey Web Application</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<ejb-local-ref>
    REFERENCED EJB
</ejb-local-ref>

<ejb-local-ref>
    REFERENCED EJB
</ejb-local-ref>
</web-app>

これが私のurlrewrite.xmlです:

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


<!--

Configuration file for UrlRewriteFilter
http://tuckey.org/urlrewrite/

-->
<urlrewrite>

<rule>
    <from>^/2.0/rest/$</from>
    <to type="redirect">/3.2-SNAPSHOT/rest/$1</to>
</rule>
<rule>
    <note>
        The rule means that requests to /test/status/ will be redirected to /rewrite-status
        the url will be rewritten.
    </note>
    <from>/test/status/</from>
    <to type="redirect">%{context-path}/rewrite-status</to>
</rule>


<outbound-rule>
    <note>
        The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
        the url /rewrite-status will be rewritten to /test/status/.

        The above rule and this outbound-rule means that end users should never see the
        url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
        in your pages.
    </note>
    <from>/rewrite-status</from>
    <to>/test/status/</to>
</outbound-rule>

</urlrewrite>

プロジェクトを構築して展開すると、urlrewritefilterに関連するこれらの行がサーバーログに印刷されます。

[#|2011-12-06T10:28:56.924-0500|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=24;_ThreadName=Thread-2;|PWC1412: WebModule[null] ServletContext.log():org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: destroy called|#]
...
[#|2011-12-06T10:29:04.069-0500|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=24;_ThreadName=Thread-2;|PWC1412: WebModule[null] ServletContext.log():org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: loaded (conf ok)|#]

2.0でURLにアクセスしようとすると、3.2-Snapshotにリダイレクトします。代わりに、404エラーを受け取ります。 server.logには何も表示されず、Javaエラーログでは、urlrewritefilterパッケージが触れられないことがわかります。ですから、私のセットアップについて何かが間違っているに違いないと思います。

これ以上の情報が必要な場合はお知らせください。時間と支援に感謝します。

役に立ちましたか?

解決

この問題は、私の耳パッケージのpom.xmlに関連することになりました。その中で、アプリケーションのコンテキストルートは、私が変更しようとしていたURIの一部を含めるように設定されました。アプリケーションには、コンテキストルートが一致したときにのみアクセスされるため、Tuckeyはもちろん使用できませんでした。

例:ユーザーはURL www.blank.com/2.0/etcに入ります。www.blank.com/3.0/etcにリダイレクトしたいと思いました。

間違った耳のポンスニペット:

<webModule>
    <groupId>com.etc</groupId>
    <artifactId>webservice-rest-webapp</artifactId>
    <contextRoot>/3.0/</contextRoot>
</webModule>

正しい耳のポムスニペット:

<webModule>
    <groupId>com.etc</groupId>
    <artifactId>webservice-rest-webapp</artifactId>
    <contextRoot>/</contextRoot>
</webModule>

そのコンテキストルートが指定されていないため、もちろん、プログラム全体のさまざまなURIのパスパラメーターを変更してバージョン番号を含める必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top