Spring Security重定向到状态代码为999的页面

qvsjd97n  于 2023-02-16  发布在  Spring
关注(0)|答案(2)|浏览(466)

成功登录后,spring将重定向到包含以下内容的/error页面

{
  "timestamp" : 1586002411175,
  "status" : 999,
  "error" : "None",
  "message" : "No message available"
}

我使用的是spring-boot 2.2.4

我的配置:

x一个一个一个一个x一个一个二个一个x一个一个三个一个

备注:

原来错误是由于对我的静态资源之一的请求失败引起的。登录页面有<script src="/resources/my-js-file.js"></script>在项目中丢失。我可以通过删除丢失的资源导入来修复此问题,但此问题可能在将来再次出现,因此无法修复。

如何防止这种情况发生?

我知道我可以用.defaultSuccessUrl("/log", true)强制重定向到起始页,但我不想这样。我也希望重定向工作正常,尽管任何未找到的资源。

7z5jn7bk

7z5jn7bk1#

在浪费了很多时间之后,我明白了发生了什么。
所以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罩自动配置的一部分:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

这会产生相同的结果,但会禁用配置ErrorMvcAutoConfiguration中的一些bean,因此要小心。

mznpcxlj

mznpcxlj2#

我遇到了同样的问题。我试着注解每个样式表链接,看看是哪个导致了错误。这是我的自定义css文件。问题是在我的css文件中,我有一个不存在的图像的url,还有另一个错误的@import语句。注解这些之后,一切都正常了。

相关问题