При отображении исключения на страницу 404 теги Spring Security не могут найти информацию аутентификации из контекста безопасности. С «настоящим» 404 аутентификация найдена.
Мой web.xml:
<error-page>
<exception-type>com.example.NotFoundException</exception-type>
<location>/app/404</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/app/404</location>
</error-page>
На JSP у меня есть:
<sec:authorize access="hasRole('ROLE_USER')">
<%-- Show navigation links --%>
</sec:authorize>
<sec:authorize access="isAnonymous()">
<%-- Show login form --%>
</sec:authorize>
Путь /app/404
сопоставлен с контроллером, который просто возвращает представление. Когда я перехожу к /foo/some_invalid_id
, NotFoundException
генерируется из контроллера и, наконец, когда он переходит к JSP, он не может найти аутентификацию в SecurityContext
и не отображает ни один из двух вариантов. Вместо этого, когда я просматриваю /something_that_really_doesnt_exist
, он может выяснить, вошел я в систему или нет, и отображает правильный HTML.