尝试调试Spring Boot Rest应用程序时发生未授权的错误

时间:2020-08-13 14:33:46

标签: spring spring-boot debugging intellij-idea

我正在使用Rest Controllers开发Spring Boot应用程序。

当我尝试使用Intellij IDEA调试应用程序时,右键单击MyApplication> Debug或Run> Debug,该应用程序将启动,并且调试器表示已连接。 但是我的控制器内部没有任何断点被触发,并且所有请求都因401未经授权而开始失败。如果我在没有调试的情况下运行,则一切正常。

如果某项拒绝状态为401的所有传入请求,这就是未触发断点的原因。我的代码永远不会执行。但是,为什么请求在调试模式下以401失败?

2 个答案:

答案 0 :(得分:0)

我将尝试用您提供的有限信息来回答这个问题(没有代码,也没有最少的可复制示例)。

Spring security使用面向方面的编程来提供安全性机制,它通过执行一些额外的代码来实现此目的,这些代码不是您使用代理编写的代码的一部分。面向方面的编程可以通过以下方式执行一些额外的代码

  1. 之前:执行代码之前先执行代码
  2. 之后:在您的方法之后执行代码
  3. 返回后:代码成功返回后将执行代码
  4. AfterThrowing:代码在您的代码引发异常后被执行
  5. 全面:代码在执行之前和之后执行

为了安全起见,通常在方法之前执行此操作。因此,首先进行检查,以查看在这种情况下您是否被授权。在这种情况下,您就不会执行该方法。

答案 1 :(得分:0)

如下更改主类的@SpringBootApplication批注即可解决此问题。

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })

这将排除并禁用Spring Boot的有关安全性的自动配置。它会尝试使用默认用户和生成的密码来保护API。

但是我仍然不明白为什么仅在调试时激活此安全性自动配置,而在正常运行时却保持禁用状态。

相关问题