我试图将简单的重定向添加到使用Restlet构建的Web应用程序中,并且它证明是非平凡的。任务很简单:我想将所有丢失的文件从Web应用程序重定向到同一个静态文件。
我使用org.restlet.routing.Redirector
使用以下值(我使用Spring注入):
<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
答案 0 :(得分:1)
我对你的问题做了一些测试,我无法弄清楚如何收到你的信息:-(。也许是因为我没有完整的代码。
事实上,我在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);
}
}
}
创建自定义Redirector
。我从组件而不是子上下文中获取了上下文。
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>
希望它可以帮到你, 亨利