Newlines和Spring的SimpleUrlHandlerMapping

时间:2010-03-11 23:10:47

标签: spring spring-mvc

我最近将我的应用程序从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?

1 个答案:

答案 0 :(得分:3)

似乎最简单的解决方法是使用/**/UserContent.do(它也会匹配中间的/)。

修改

更优雅的方法,与/的{​​{1}}不匹配:/{foo:(?s:.*)}/UserContent.do(使用{name:regexp}语法使用自定义正则表达式声明路径变量,并使用(?s:X)来转换Pattern.DOTALL标志)