我正在将Sping Boot Security与OAuth2配合使用。我不想禁用健康终结点的安全性。
我可以完全禁用安全性,或者编写自己的WebSecurityConfigurerAdapter
实现并禁用自动配置的实现。
但是如何修改WebSecurityConfigurerAdapter
(OAuth2SsoDefaultConfiguration
)的现有实现呢?
我试图创建自己的配置而不禁用自动配置的配置,但由于Order
冲突,这是不可能的。
下面是错误消息:
Caused by: java.lang.IllegalStateException: @Order on WebSecurityConfigurers must be unique.
Order of 100 was already used on SecurityConfiguration$$EnhancerBySpringCGLIB$$9505fc58@13f182b9,
so it cannot be used on
org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2SsoDefaultConfiguration$$EnhancerBySpringCGLIB$$dc290e2b@5ee0cf64 too.
此外,我试图显式地为自己的安全配置设置更高的顺序,但看起来自动配置的优先级会覆盖我的。
那么,如何在不重新实现整个配置的情况下覆盖特定的安全规则呢?
8条答案
按热度按时间368yc8dk1#
您需要在中实现以下方法
@SpringBootApplication
类1bqhqjot2#
确保在
WebSecurityConfigurerAdapter
类上使用@EnableOAuth2Sso
,这一点很重要,因为它将包含OAuth2SsoCustomConfiguration
,OAuth2SsoCustomConfiguration
基本上复制了OAuth2SsoDefaultConfiguration#configure
的功能。您可能还希望显示完整的健康详细信息:
axkjgtzd3#
以下是可能的检查。
org.springframework.core.annotation.Order
代替
org.apache.logging.log4j.core.config.Order
由于Spring没有解析正确的注解,因此它假设两种配置的默认值都是100。
也许你已经用@EnableWebSecurity标注了另一个类,但是要注意只有一个类可以实现这个标注。
解决方案四:
0pizxfdo4#
我认为您可以使用自己的实现来扩展您使用的实现(
OAuth2SsoDefaultConfiguration
,如果我没弄错的话),然后扩展configure方法以忽略您的健康端点。顺便说一下
Also, I tried to explicitly set higher order for my own security configuration, but looks like autoconfigured one overrides mine.
@Order
的工作方式是,数字越小优先级越高,所以这就解释了为什么自动配置会覆盖你的。https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/Order.htmlztyzrc3y5#
management.security.enabled:false在spring Boot 2中不再有效。我们需要采取ConfigurerAdapter的方式。下面是我使用OAuth2资源服务器时的代码。
5us2dqdw6#
management.security.enabled: false
不适用于 Spring Boot 2.x版本
wmvff8tz7#
对于
Kotlin
izj3ouym8#
您也可以在应用程序中使用
management.security.enabled: false
.propeeties(或. yaml)。它将自动删除执行器公开端点的任何安全性