java - 使用 Spring Security 标签库时将异常映射到 404 页面

标签 java spring exception-handling spring-security jsp-tags

将异常映射到 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/

相关文章:

java - Libgdx 生成 RogueLIke Dungeon - 算法错误

java - Spring Boot REST · @Constraint 用于删除?

Symfony2 异常响应。用 200 替换 404 状态码

powershell - 无法在 Powershell 脚本中捕获 ADException

java - ORMLite 中的多个组合 OR 条件

java - 从 Android 通过套接字发送缓冲数据

java - 如何将音频输入流从谷歌翻译转换为 wav 文件?

java - Spring 不会在运行时发现新上下文的 @RequestMapping 注释

java - NullPointerException 尝试设置index.jsp

c# - 带参数的本地化错误消息