Spring Security默认为所有端点提供强制身份验证,无论我们是否添加了 * 基于角色的 * 安全性。
- 下面是设置pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 组态
x一个一个一个一个x一个一个二个一个x一个一个三个一个
401未授权
此外,此筛选器可以安全地跳过对端点具有USER权限的用户(/admin)。
为了访问公共端点,您需要输入凭据。但是我指定的设置应该提供公共访问。
我在不同版本的Security上反复遇到过这样的问题,目前还没有找到解释。
也许有人对如何绕过这个问题有想法(什么时候会发生),为什么会发生这种情况?
2条答案
按热度按时间jjhzyzn01#
我已删除注解**@EnableWebSecurity。**
以下是我的发现:
需要**@EnableWebSecurity**注解才能完全禁用默认Web应用程序安全配置。
@EnableWebSecurity导致Sping Boot 自动配置被取消,但是,这不会取消身份验证管理器配置的默认设置或Actuator的安全性设置。
此外,如果使用Sping Boot ,在类的自动配置过程中,它将自动配置安全模块的组件。
因此,如果您在应用程序中的任何位置使用**@EnableWebSecurity定义@Configuration**,它将禁用Sping Boot 中的默认Web应用程序安全设置。
应用程序现在执行预期的行为。
sqougxex2#
SpringSecurity在默认情况下有效地保护了所有端点,这是可取的,因为如果您忘记配置一些东西,安全漏洞可能会非常快地发生。
也就是说,您可以通过使用permitAll方法显式地允许每个人使用某些端点,而不会干扰注解。
在当前设置中,您可以按如下方式缩短:
将产生这样的效果:home是公共的,admin是为具有ADMIN角色的用户保留的,protected是为具有ADMIN或USER角色的用户保留的。
这能解决你的问题吗?