2013-05-06 3 views
1

У меня есть собственные страницы ошибок для каждого кода ошибки, который я хочу обработать, хотя я обнаружил, что теги Spring-безопасности не работают при использовании этих страниц. В качестве примера, с ниже только «один» показывает:Весенние метки безопасности не работают на страницах с ошибками

<%@ page session="false" %> 
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %> 
<p>One</p> 
<sec:authorize access="isAuthenticated()"> 
    <p>Two</p> 
</sec:authorize> 
<sec:authorize access="!isAuthenticated()"> 
    <p>Three</p> 
</sec:authorize> 

Конкретно я таргетинг страницы ошибок, предоставляемую моей web.xml, т.е.

<error-page> 
    <error-code>404</error-code> 
    <location>/WEB-INF/error/404-layout.jsp</location> 
</error-page> 

В моем контроллере я бросить RuntimeException называется ResourceNotFoundException аннотированными с @ResponseStatus(value = HttpStatus.NOT_FOUND), где сущности не были найдены. Это правильно перенаправляется на страницу с ошибкой.

Не работает то, что описано выше, что-либо в теге весенней безопасности не отображается, будь то результат true или false, как проиллюстрировано в моем примере, оба тега не создают выход.

ответ

1

Теги будут работать только «(возможно, вы должны уточнить, что вы подразумеваете под« нерабочим »), если страница отображается для запроса, который проходит через цепочку фильтров Spring Security.

Страницы с ошибками, которые вы объявляете в своем web.xml, будут обрабатываться непосредственно контейнером, и, насколько я знаю, нет способа сказать ему применить к ним фильтрацию.

+0

Правильно ли это? Разве он не прошел бы через цепочку, чтобы добраться до контроллера? Это контроллер, который выдает «ResourceNotFoundException». Я полагаю, что альтернативой было бы настроить контроллер пружины, чтобы страницы ошибок отображались на статические пути. –

+0

Я не уверен, к какому контроллеру вы обращаетесь. Не могли бы вы уточнить в своем вопросе, какие типы страниц ошибок вы говорите (вы имеете в виду те, которые определены с помощью 'error-page' в вашем' web.xml' или что-то еще), а также то, что на самом деле не работает? –

+0

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

1

Существует решение для нее - см ответ https://stackoverflow.com/a/6199119 - это должно быть достаточно, чтобы добавить эти дополнительные данные для фильтрации-отображение в web.xml:

<filter-mapping> 
    ... 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 
Смежные вопросы