gpt4 book ai didi

java - 服务器入站重定向找不到下一个 ReSTLet

转载 作者:行者123 更新时间:2023-11-30 08:14:53 25 4
gpt4 key购买 nike

我正在尝试将一个简单的重定向添加到 ReSTLet 内置的 Web 应用程序中,事实证明这并不简单。任务很简单:我想将所有丢失的文件从 Web 应用程序实际重定向到同一个静态文件。

我正在使用具有以下值的org.reSTLet.routing.Redirector(我正在使用Spring注入(inject)):

<bean name="router" class="org.restlet.ext.spring.SpringRouter">
<constructor-arg ref="trackerComponentChildContext" />
<property name="attachments">
<map>
<entry key="/api" value-ref="apiRouter" />
<entry key="/statics" value-ref="staticsDirectory" />
<entry key="/" value-ref="staticsRedirector" />
</map>
</property>
</bean>

<bean id="staticsRedirector" class="ca.uhnresearch.pughlab.tracker.restlets.CustomRedirector">
<constructor-arg ref="trackerComponentChildContext" />
<constructor-arg value="{o}/statics/index.html" />
<constructor-arg value="7" />
</bean>

我可以相对简单地处理文件层次结构,但我只想将与 /api/statics 不匹配的任何内容发送到 /同一应用程序中的 statics/index.html

ReSTLet几乎得到它,而且它现在似乎确实拾取了对正确文件的引用,它只是不能完全满足它。

我已将整个事情的工作副本(包括下面蒂埃里的建议)放在:https://github.com/morungos/restlet-spring-static-files 。我希望发生的事情类似于下面的等效顺序尝试:

curl http://localhost:8080/statics/**/* 以点击相应的/statics/**/*

curl http://localhost:8080 以点击主 /statics/index.html

curl http://localhost:8080/**/* 以点击主 /statics/index.html

最佳答案

我对您的问题进行了一些测试,但我不知道如何获取您的消息:-(。也许是因为我没有完整的代码。

事实上,我在 SpringRouter 本身层面看到了一个问题。我想使用 attachDefault 而不是 attach("/", ...)/attach("", ...) 附加重定向器setDefaultAttachment 方法实际上执行 attach("", ...)

所以我做了以下更新:

  • 创建自定义 SpringRouter

    public class CustomSpringRouter extends SpringRouter {
    public void setDefaultAttachment(Object route) {
    if (route instanceof Redirector) {
    this.attachDefault((Restlet) route);
    } else {
    super.setDefaultAttachment(route);
    }
    }
    }
  • 创建自定义重定向器。我从组件获取上下文而不是子上下文。

    public class CustomRedirector extends Redirector {
    public CustomRedirector(Component component, String targetPattern, int mode) {
    super(component.getContext(), targetPattern, mode);
    }
    }

然后我使用以下 Spring 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="myComponent" class="org.restlet.ext.spring.SpringComponent">
<property name="defaultTarget" ref="router" />
</bean>

<bean name="router" class="test.CustomSpringRouter">
<property name="attachments">
<map>
<entry key="/api" value-ref="apiRouter" />
<entry key="/statics" value-ref="staticsDirectory" />
</map>
</property>
<property name="defaultAttachment" ref="staticsRedirector" />
</bean>

<bean id="staticsRedirector" class="test.CustomRedirector">
<constructor-arg ref="myComponent" />
<constructor-arg value="{o}/statics/index.html" />
<constructor-arg value="7" />
</bean>

<bean name="apiRouter" class="org.restlet.ext.spring.SpringRouter">
(...)
</bean>

(...)
</beans>

希望对你有帮助蒂埃里

关于java - 服务器入站重定向找不到下一个 ReSTLet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29808163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com