从1.0.5更新到1.1.0后,OCPsoft重写规则不再有效

时间:2012-12-25 17:59:21

标签: java tomcat java-ee url-rewriting ocpsoft-rewrite

将版本1.0.5.Final中的OCPsoft Rewrite更新为1.1.0.Final时,以下规则不再有效,我不知道如何修复它:

.addRule(
    Join.path("/{i}/{d}")
        .where("i").matches("[-_a-zA-Z0-9~*]{8}")
        .where("d").matches("[-_a-zA-Z0-9~*]{32}")
        .to("/resources/html/user/doSomething.html?i={i}&d={d}")
)

在重写changelog中有一点可以帮助你帮助我:

  

配置字符串现在是文字的。必须通过>参数配置正则表达式,例如:.defineRule().when(Path.matches("/{*}").where("*").matches(".*"))

我得到的例外情况如下:

Exception starting filter OCPsoft Rewrite Filter
    java.lang.NullPointerException
        at org.ocpsoft.rewrite.servlet.config.rule.Join.where(Join.java:199)
        at org.ocpsoft.rewrite.servlet.config.rule.Join.where(Join.java:47)
        at com.myapp.util.RewriteConfigurationProvider.getConfiguration(RewriteConfigurationProvider.java:39)
        ...

2 个答案:

答案 0 :(得分:2)

以下是诀窍,我只需要对连接子句重新排序:

.addRule(
    Join.path("/{i}/{d}")
        .to("/resources/html/user/doSomething.html")
        .where("i").matches("[-_a-zA-Z0-9~*]{8}")
        .where("d").matches("[-_a-zA-Z0-9~*]{32}")
        .withRequestBinding();
)

感谢林肯,他在Rewrite支持论坛上发现了这个并回答了我的问题。

答案 1 :(得分:1)

嗯......看起来确实像个bug,我会尝试重现这一点,但您不需要在目标网址中重新定义{i}{d}。如果您使用请求绑定,Join会自动为您处理,如下所示:

.addRule(
   Join.path("/{i}/{d}")
    .where("i").matches("[-_a-zA-Z0-9~*]{8}")
    .where("d").matches("[-_a-zA-Z0-9~*]{32}")
    .to("/resources/html/user/doSomething.html").withRequestBinding();
)

我猜你是否这样做,你的问题就会消失。如果您要将旧.withInboundCorrection()网址的请求重定向到新网址,也可以使用.html

如果您仍然遇到此问题,请在支持论坛上发帖,我们会弄清楚:)

抱歉,您遇到了麻烦,希望它不再是麻烦了。)