Цепочка фильтров в фильтре URLrewrite

Я использую фильтр перезаписи URL Tuckey в сочетании с домашним фильтром безопасности.

  • Фильтр перезаписи URL сопоставляется с /*
  • Фильтр безопасности отображается через '/*'

Кроме того, фильтр перезаписи URL имеет следующее правило:

<rule>
    <name>User</name>
    <from>^/user/$</from>
    <to>/user.do</to>
</rule>

Для такого запроса, как: myapp/user/, я ожидаю такой поток:

  1. Сопоставляется фильтром перезаписи URL. URL-адрес запроса (или путь сервлета) становится user.do.
  2. Сопоставляется фильтром безопасности. Проверка и, возможно, перенаправление
  3. Получите доступ к контроллеру, сопоставленному с user.do.

Однако каким-то образом второй шаг перескакивает всякий раз, когда Tuckey URL Rewrite применяет правило. Это приводит к очень неприятному поведению, такому как доступ к защищенным страницам без надлежащей аутентификации.

Я что-то пропустил? Должен ли я ожидать другого поведения?


person Ionut    schedule 07.11.2012    source источник


Ответы (2)


Если вы выполните type="redirect", клиенту будет присвоен статус 302 "временное перенаправление", который в конечном итоге перенаправит браузер на новый URL-адрес.

Если вы хотите, чтобы пользователь по-прежнему видел старый URL-адрес «от» в адресной строке браузера, попробуйте добавить их в фильтр «безопасности»:

    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>    
person serg.nechaev    schedule 20.05.2014

Это происходит потому, что обычно urlrewritefilter не перенаправляет URL-адрес. Это просто внутренняя переадресация. Попробуйте добавить type="redirect" в качестве атрибута, и ваш фильтр безопасности поймает перенаправленный запрос.

<rule>
    <name>User</name>
    <from>^/user/$</from>
    <to type="redirect">/user.do</to>
</rule>

Это работало для меня раньше.

person ozubaba    schedule 28.11.2012