2

对于我希望处理的每个错误代码,我都有自定义错误页面,尽管我发现 spring-security 标记在使用这些页面时不起作用。例如,以下仅显示“一个”:

<%@ 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>

具体来说,我的目标是 my 提供的错误页面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还是false,如我的示例所示,两个标签都不会产生输出。

4

2 回答 2

1

如果页面是针对通过 Spring Security 过滤器链的请求呈现的,则标签只会“工作”(您可能应该澄清“不工作”的意思)。

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

于 2013-05-06T09:59:20.547 回答
1

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

<filter-mapping>
    ...
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>
于 2015-01-14T13:40:58.823 回答