如何关闭Spring Security自动配置?

问题描述 投票:0回答:2

我有一个像这样的application.yml:

spring:
    security:
      oauth2:
        resourceserver:
          jwt:
            issuer-uri: http://localhost:8180/auth/realms/dev
            
spring-security:
  provider: 
    default
spring-security:
  provider: 
    keycloak

所以我在后台使用了钥匙斗篷,但我有一个

spring-security.provider
属性,可以是
default
keycloak

如果我使用

default
我不希望 Spring Security 工作,所以我什至不启动 keycloak。但是,如果设置了
spring.security.oauth2.resourceserver.jwt.issuer-uri
,它会尝试与我的 keycloak 建立连接,但事实并非如此。

如果

spring.security.oauth2.resourceserver.jwt.issuer-uri
设置为“默认”,我希望应用程序忽略
spring-security.provider

目前我有两个基于

spring-security.provider
的配置类:

@Configuration
@ConditionalOnProperty(prefix = "spring-security", value = "provider", havingValue = "default", matchIfMissing = true)
public class DefaultSecurityConfigurer {
    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        http.csrf()
            .disable();
        return http.build();
    }
}
@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
@RequiredArgsConstructor
@ConditionalOnProperty(prefix = "spring-security", value = "provider", havingValue = "keycloak", matchIfMissing = false)
@Configuration
public class KeycloakSecurityConfigurer {

    private final SpringSecurity springSecurity;
    private final RolesConverter authoritiesExtractor;

    // @formatter:off
    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {      
        http
        .authorizeExchange()
        .pathMatchers(springSecurity.getApiMatcher())
        .authenticated()
        .pathMatchers("/**")
        .permitAll()
        .and()
        .oauth2ResourceServer()
        .jwt()
        .jwtAuthenticationConverter(grantedAuthoritiesExtractor());

        return http.build();
    }
    
    @Bean
    public Converter<Jwt, Mono<AbstractAuthenticationToken>> grantedAuthoritiesExtractor() {
        return new ReactiveJwtAuthenticationConverterAdapter(authoritiesExtractor);
    }
}

提前致谢。

spring-boot spring-security spring-oauth2
2个回答
1
投票

您可以使用以下命令禁用 spring security 自动配置

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
主类上方的注释(包含 main 方法) 或者 通过将此配置添加到 application.properties 文件中:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
在某些特殊情况下,此设置还不够。 例如,几乎每个 Spring Boot 应用程序都是通过类路径中的 Actuator 启动的。这会导致问题,因为另一个自动配置类需要我们刚刚排除的类,因此应用程序将无法启动。 为了解决这个问题,我们需要排除该类;并且,针对 Actuator 的情况,我们需要排除 ManagementWebSecurityAutoConfiguration。


0
投票

创建配置,例如在

src/main/resources
中:
application-no-security.yml:

spring:
  autoconfigure:
    exclude: >
      org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,
      org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration

激活它,例如:

@ActiveProfile("no-security")
class SomeTest {
...
}
© www.soinside.com 2019 - 2024. All rights reserved.