浪费了很多时间后,我才知道发生了什么事。
因此,spring无法找到登录页面上使用的静态资源之一。但是,
404它尝试呈现错误页面并将请求转发给,而不是返回此资源的状态
/error。然后Spring
Security拒绝此请求,因为用户未被授权。它将
/error请求保存到会话中(用于成功登录后进行重定向),并将用户重定向到登录页面。
当然,用户看不到此重定向,因为状态
302在后台完成的请求返回。但是主要问题是
/error请求保存在会话中。
然后用户成功登录,并spring检查该属性的会话并重定向到
/error页面。默认情况下,spring假设您在静态资源中的某处有这样的页面。如果没有该页面,您将看到状态码为999的此奇怪错误。
解决方案1
忽略
/error安全配置中的页面:
web.ignoring().antMatchers("/favicon.ico", "/resources/**", "/error");因此,成功登录后,此请求将不会保存到会话中以供用户重定向。您会在登录页面上看到对静态资源的请求的状态码将从
302变为
404。
解决方案2
忽略spring boot autoconfig的一部分:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
这给出了相同的结果,但是从配置中禁用了一些bean,
ErrorMvcAutoConfiguration所以要小心。



