Spring安全标记在错误页面中不起作用

时间:2013-05-06 06:40:50

标签: jsp spring-security

我有我希望处理的每个错误代码的自定义错误页面,但我发现使用这些页面时spring-security标签不起作用。举个例子,下面只有“One”表示:

<%@ 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,找不到实体的位置。这会正确地重定向到错误页面。

什么不起作用正是上面解释的内容,spring安全标记中的任何内容都不会呈现,无论是false还是{{1}},如我的示例所示,两个标记都生成没有输出。

2 个答案:

答案 0 :(得分:1)

如果页面是针对通过Spring Security过滤器链的请求呈现的,那么标签只会“起作用”(您应该澄清“不工作”的含义)。

您在web.xml中声明的错误页面将由容器直接处理,据我所知,没有办法告诉它应用过滤器映射。

答案 1 :(得分:1)

有一个解决方案 - 请参阅答案https://stackoverflow.com/a/6199119 - 将这些附加信息添加到web.xml中的过滤器映射就足够了:

<filter-mapping>
    ...
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>