Новые строки и Spring's SimpleUrlHandlerMapping - PullRequest
1 голос
/ 12 марта 2010

Я недавно обновил свое приложение с 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.

Я больше не планирую позволять пользователям вводить символы новой строки в этом месте. Это был недосмотр с самого начала. Однако я хотел бы, чтобы эти URL продолжали работать по причинам SEO. Есть ли способ сопоставить URL-адрес с новой строкой в ​​кодировке URL в Spring 3?

1 Ответ

3 голосов
/ 12 марта 2010

Кажется, что самый простой способ - использовать /**/UserContent.do (он также будет соответствовать / в середине).

EDIT:

Более элегантный подход, не соответствует /: /{foo:(?s:.*)}/UserContent.do (объявляет переменную пути с пользовательским регулярным выражением с использованием синтаксиса {name:regexp} и использует (?s:X) для включения флага Pattern.DOTALL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...