Как правильно настроить UrlRewriteFilter Tuckey?

Поэтому я надеюсь использовать UrlRewriteFilter от Tuckey для перенаправления пользователей, пытающихся получить доступ к более старым версиям продукта веб-сервиса. Простые вещи, такие как перенаправление с www.blah.com/oldversion/blah/blah на www.blah.com/newversion/blah/blah.

Я потратил немного времени, пытаясь правильно настроить это в соответствии с несколько расплывчатыми инструкциями на веб-сайте Tuckey но у меня возникли некоторые трудности.

У меня есть файлы в правильных местах. urlrewrite.xml находится в папке WEB-INF пакета webapp, рядом с web.xml. urlrewrite-3.2.0.jar находится в папке lib WEB-INF.

Вот мой 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
[#|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)|#]
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
[#|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)|#]
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)|#]

Когда я пытаюсь получить доступ к URL-адресу 2.0, он должен перенаправить меня на 3.2-SNAPSHOT. Вместо этого я получаю ошибку 404. В server.log ничего не отображается, и в моих журналах ошибок Java я вижу, что пакет UrlRewriteFilter никогда не трогался. Поэтому я думаю, что в моей настройке должно быть что-то неправильное.

Дайте мне знать, если вам нужна дополнительная информация, и спасибо за ваше время и помощь.


person lowell    schedule 06.12.2011    source источник


Ответы (1)


В конечном итоге проблема была связана с 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 по всей программе, чтобы включить номер версии.

person lowell    schedule 07.12.2011