我有一个错误页面,在返回404响应状态时显示。 这个页面是由模板机制生成的(我使用了tile);在这个模板中,我有一个包含类似内容的标题:
<sec:authorize access="isAnonymous()">
blabla
</sec:authorize>
<sec:authorize access="isAuthenticated()">
blibli
</sec:authorize>
因此,根据用户是否经过身份验证,它会显示blibli或blabla。此代码适用于使用此模板的所有页面,但我的404页面除外!它什么都没显示!
任何想法??
答案 0 :(得分:10)
我敢打赌,问题在于如何在filter-mapping
中定义web.xml
。最常见的配置是:
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这会将过滤器映射到所有网址,但仅限于通过REQUEST
方法访问的网址。此过滤器未捕获所有其他情况(如INCLUDE
,FORWARD
和ERROR
)。因此,要将过滤器绑定到ERROR
个请求,请将其定义为
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<!-- apply Spring Security authentication to error-pages -->
<dispatcher>ERROR</dispatcher>
</filter-mapping>
试试吧。如果不起作用则添加<dispatcher>INCLUDE</dispatcher>
因为Tiles,可能包括这样的页面。
另见:
答案 1 :(得分:1)
对于那些寻找java配置的人:
private void registerSpringSecurityFilterChain(ServletContext servletContext) {
FilterRegistration.Dynamic springSecurityFilterChain = servletContext.addFilter(
BeanIds.SPRING_SECURITY_FILTER_CHAIN, new DelegatingFilterProxy());
springSecurityFilterChain.addMappingForUrlPatterns(null, false, "/*");
springSecurityFilterChain.addMappingForUrlPatterns(EnumSet.of(DispatcherType.ERROR), false, "/*");
}
答案 2 :(得分:0)
如果此404页面不在您的安全URL中,那么isAnonymous()和isAuthenticated()将返回false并且不会呈现任何内容。