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

eni9jsuy  于 2023-04-10  发布在  Spring
关注(0)|答案(3)|浏览(296)

我正在使用Rest Controllers开发Sping Boot 应用程序。
当我尝试使用Intellij IDEA调试应用程序时,通过右键单击MyApplication〉Debug或Run〉Debug,应用程序启动,调试器说它已连接。但是我的控制器中没有一个断点被触发,所有请求都开始失败,401未授权。如果我不调试就运行,一切正常。
如果某个东西拒绝了所有状态为401的传入请求,这就是为什么断点没有被触发的原因。我的代码从来没有被执行过。但是为什么请求失败时状态为401,然后在调试模式下?

zxlwwiss

zxlwwiss1#

我将尝试用您提供的有限信息来回答这个问题(没有代码,也没有最小的可重复示例)。
Spring security使用面向方面的编程来提供安全机制。它通过执行一些额外的代码来实现这一点,这些代码不是您使用代理编写的代码的一部分。面向方面的编程可以通过以下方式执行一些额外的代码

  1. Before:在代码执行之前执行代码
  2. After:代码在你的方法之后执行
    1.返回后:在方法成功返回后执行代码
    1.后抛:在代码引发异常后执行代码
  3. Around:代码在之前和之后执行
    在安全的情况下,这通常是在方法之前完成的。所以首先检查在这种情况下你是否被授权。在这种情况下,你没有,所以方法不会被执行。
ewm0tg9j

ewm0tg9j2#

如下所示更改主类的@SpringBootApplication注解可以解决这个问题。

  1. @SpringBootApplication(exclude = { SecurityAutoConfiguration.class })

这会排除并禁用Sping Boot 的自动安全配置。它会尝试使用默认用户和生成的密码保护API。
但我仍然不明白为什么这个安全自动配置只在调试时激活,而在正常运行时保持禁用。

qoefvg9y

qoefvg9y3#

当我点击@RestController时,我遇到了一个新问题,但我的点击无法到达控制器,因为我在maven中安装了Spring Security ,只是我删除了Spring Security 依赖项 org.springframework. Boot spring-boot-starter-security

相关问题