将异常映射到 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
路径映射到只返回 View 的 Controller 。当我浏览到 /foo/some_invalid_id
时,NotFoundException
从 Controller 中抛出,最后当它转到 JSP 时,它无法在 SecurityContext< 中找到身份验证
并且不呈现这两个选项。相反,当我浏览到 /something_that_really_doesnt_exist
时,它能够判断我是否登录并呈现正确的 HTML。
最佳答案
将以下两个调度程序元素添加到您的 spring 安全过滤器映射中:
<filter-mapping>
...
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
默认情况下只有普通请求通过定义的过滤器映射。
“INCLUDE”和“FORWARD”是另外两个有效的调度程序元素值。
关于java - 使用 Spring Security 标签库时将异常映射到 404 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4780878/