我最近将我的应用程序从Spring 2.5.6升级到Spring 3.0.0。几天后,我注意到我的一些页面不再起作用了。问题似乎是我的UserContent.do控制器。
UserContent.do使用SimpleUrlHandlerMapping
映射进行映射。它看起来像这样:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/*/UserContent.do">UserContentController</prop>
</props>
</property>
</bean>
问题是我在该中间目录中允许用户生成的内容,因此这些URL可以是任何内容:
http://mysite.com/foo/UserContent.do
http://mysite.com/bob/UserContent.do
http://mysite.com/foo%0a%0dbob/UserContent.do
这是问题的第三种情况。出于某种原因,似乎“\ r \ n”在Spring 3中不再匹配*。看起来它仍然适用于Spring 2.5.6。
我计划不再允许用户在该位置输入换行符。这是一个疏忽的开始。但是,我希望这些网址能够继续为SEO工作。有没有办法在Spring 3中以某种方式映射带有URL编码换行符的URL?
答案 0 :(得分:3)
似乎最简单的解决方法是使用/**/UserContent.do
(它也会匹配中间的/
)。
修改强>
更优雅的方法,与/
的{{1}}不匹配:/{foo:(?s:.*)}/UserContent.do
(使用{name:regexp}
语法使用自定义正则表达式声明路径变量,并使用(?s:X)
来转换Pattern.DOTALL
标志)