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

hle*_*one 9 java spring exception-handling jsp-tags spring-security

将Exception映射到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>
Run Code Online (Sandbox Code Playgroud)

在JSP上我有:

<sec:authorize access="hasRole('ROLE_USER')">
  <%-- Show navigation links --%>
</sec:authorize>
<sec:authorize access="isAnonymous()">
  <%-- Show login form --%>
</sec:authorize>
Run Code Online (Sandbox Code Playgroud)

/app/404路径被映射到一个控制器,该控制器仅返回图.当我浏览到/foo/some_invalid_idNotFoundException会从控制器抛出最后当它进入JSP无法找到在认证SecurityContext并呈现既不两个选项.相反,当我浏览/something_that_really_doesnt_exist它时,它能够弄清楚我是否登录并呈现正确的HTML.

app*_*k42 17

将以下两个调度程序元素添加到spring security filter-mapping中:

<filter-mapping>
    ...
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

默认情况下,只有普通请求才会通过定义的过滤器映射.

"INCLUDE"和"FORWARD"是另外两个有效的调度程序元素值.