isAnonymous()和isAuthenticated()都在错误页面上返回false

tib*_*ibo 4 java spring jsp spring-security

我有一个错误页面,当返回404响应状态时显示.这个页面是由模板机制生成的(我使用了tile); 在这个模板中,我有一个包含类似内容的标题:

    <sec:authorize access="isAnonymous()">
        blabla
    </sec:authorize>
    <sec:authorize access="isAuthenticated()">
        blibli
    </sec:authorize>
Run Code Online (Sandbox Code Playgroud)

因此,根据用户是否经过身份验证,它会显示blibli或blabla.此代码适用于使用此模板的所有页面,但我的404页面除外!它什么都没显示!

任何的想法??

Sla*_*hin 10

我敢打赌,问题的关键在于你如何定义filter-mappingweb.xml.最常见的配置是:

<filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

这会将过滤器映射到所有URL,但仅限于通过REQUEST方法访问时.所有其他情况下(如INCLUDE,FORWARDERROR)不受此过滤器捕获.因此,要将过滤器绑定到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>
Run Code Online (Sandbox Code Playgroud)

试试吧.如果不起作用则添加<dispatcher>INCLUDE</dispatcher>因为Tiles,可能包括这样的页面.

也可以看看: