У меня есть собственные страницы ошибок для каждого кода ошибки, который я хочу обработать, хотя я обнаружил, что теги 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
, как проиллюстрировано в моем примере, оба тега не создают выход.
Правильно ли это? Разве он не прошел бы через цепочку, чтобы добраться до контроллера? Это контроллер, который выдает «ResourceNotFoundException». Я полагаю, что альтернативой было бы настроить контроллер пружины, чтобы страницы ошибок отображались на статические пути. –
Я не уверен, к какому контроллеру вы обращаетесь. Не могли бы вы уточнить в своем вопросе, какие типы страниц ошибок вы говорите (вы имеете в виду те, которые определены с помощью 'error-page' в вашем' web.xml' или что-то еще), а также то, что на самом деле не работает? –
Если честно, я не уверен, что спецификация сервлета дает вам какие-либо гарантии относительно того, как обрабатываются страницы с ошибкой. Это может быть даже специфично для контейнеров. В любом случае, они, как правило, очень просты. Вы можете проверить, сбросив стек из одного, чтобы увидеть, что он содержит. –