成功登录后,身份验证显然不是null,但仍然登录强制错误会使身份验证为空。
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链接。
答案 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>
希望这有帮助