在错误页面上,Thymeleaf身份验证对象为null或为空

时间:2016-08-18 17:55:49

标签: spring spring-boot thymeleaf

成功登录后,身份验证显然不是null,但仍然登录强制错误会使身份验证为空。

  • Spring Boot 1.3.1
  • Thymeleaf 2.1.4
  • Thymeleaf-Spring4 2.1.4
  • Thymeleaf-附加-SpringSecurity4

error.html(处理错误/异常的自定义错误页面)

...          
<header th:include="fragments/menu :: menu"></header>
...

menu.html(在错误/执行期间不显示所有菜单项)

 ...
 <li sec:authorize="hasAnyRole('ADMIN', 'MANAGER')">
 ...
 </li>
 ...
 <li sec:authorize="isAuthenticated()"><a id="logoff" href="#logoff">Log Off</a></li>
 ..

这种行为是期待还是我遗漏了什么?我期望身份验证对象不为null,因此我可以重新显示安全的URL链接。

2 个答案:

答案 0 :(得分:2)

这是Spring Boot的一个已知问题,甚至记录在the documentation

  

N.B。如果您注册一个错误页面,其路径最终将由过滤器处理(例如,某些非Spring网络通常会这样)   框架,如泽西岛和威克特),然后过滤器必须   显式注册为ERROR调度程序(默认值)   FilterRegistrationBean不包含ERROR调度程序类型。)

例如:

@Bean
public FilterRegistrationBean myFilter() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new MyFilter());
    ...
    registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
    return registration;
}

另见related issue in Spring Boot tracker

但您可以通过将以下行添加到application.properties,从1.3.1(参见#4505)开始更简单地配置它:

security.filter-dispatcher-types: ASYNC, FORWARD, INCLUDE, REQUEST, ERROR

答案 1 :(得分:1)

查看thymeleaf-extras-springsecurity github页面。

您应该将SpringSecurity方言添加到模板引擎:

<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
    <property name="additionalDialects">
        <set>
            <bean class="org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect"/>
        </set>
    </property>
</bean>

希望这有帮助